diff options
author | Bernhard Rosenkraenzer <bero@linaro.org> | 2017-06-30 09:52:52 +0200 |
---|---|---|
committer | Bernhard Rosenkraenzer <bero@linaro.org> | 2017-06-30 09:52:52 +0200 |
commit | 8e91b10d39a911f779d2b9bfd9c32faca514ea69 (patch) | |
tree | 235c5120bdb946bb5c23df6bf6ffddd4fa35494e | |
download | aarch64-buildhosts-8e91b10d39a911f779d2b9bfd9c32faca514ea69.tar.gz |
Initial import
-rw-r--r-- | binutils-2.25aosp-gcc7-buildfix.patch | 13 | ||||
-rw-r--r-- | bionic-aarch64-host.patch | 28 | ||||
-rwxr-xr-x | build-prebuilts | 385 | ||||
-rw-r--r-- | build_core-aarch64-host.patch | 208 | ||||
-rw-r--r-- | build_make-aarch64-host.patch | 208 | ||||
-rw-r--r-- | build_soong-aarch64-host.patch | 496 | ||||
-rw-r--r-- | build_tools-aarch64-host.patch | 208 | ||||
-rw-r--r-- | llvm-4.0-libc++-libc++abi-dependency.patch | 20 | ||||
-rw-r--r-- | ndk-diffs.patch | 7982 | ||||
-rw-r--r-- | ndk-libc++-bionic.patch | 37 | ||||
-rw-r--r-- | ndkrepo-aarch64-host.patch | 501 | ||||
-rw-r--r-- | prebuilts_build-tools-aarch64-host.patch | 88 |
12 files changed, 10174 insertions, 0 deletions
diff --git a/binutils-2.25aosp-gcc7-buildfix.patch b/binutils-2.25aosp-gcc7-buildfix.patch new file mode 100644 index 0000000..b3786cb --- /dev/null +++ b/binutils-2.25aosp-gcc7-buildfix.patch @@ -0,0 +1,13 @@ +diff --git a/binutils-2.25/gold/dwarf_reader.cc b/binutils-2.25/gold/dwarf_reader.cc +index f5ca7cd7..dd5635c0 100644 +--- a/binutils-2.25/gold/dwarf_reader.cc ++++ b/binutils-2.25/gold/dwarf_reader.cc +@@ -1961,7 +1961,7 @@ Sized_dwarf_line_info<size, big_endian>::read_header_tables_v5( + } + gold_debug(DEBUG_LOCATION, "File %3d: %s", + static_cast<int>(file_list.size()), path); +- file_list.push_back(std::make_pair<int, std::string>(dirindex, path)); ++ file_list.push_back(std::make_pair<int, std::string>(int(dirindex), path)); + } + + delete[] types; diff --git a/bionic-aarch64-host.patch b/bionic-aarch64-host.patch new file mode 100644 index 0000000..9af509d --- /dev/null +++ b/bionic-aarch64-host.patch @@ -0,0 +1,28 @@ +diff --git a/tests/Android.bp b/tests/Android.bp +index 519c28c5d..95303cf0d 100644 +--- a/tests/Android.bp ++++ b/tests/Android.bp +@@ -477,7 +477,7 @@ cc_test { + "libtest_invalid-zero_shentsize.so", + "libtest_invalid-zero_shstrndx.so", + "libtest_invalid-textrels.so", +- "libtest_invalid-textrels2.so", ++// "libtest_invalid-textrels2.so", + "preinit_getauxval_test_helper", + "preinit_syscall_test_helper", + "libnstest_private_external", +diff --git a/tests/Android.build.prebuilt.mk b/tests/Android.build.prebuilt.mk +index c98aee24a..9bcc411e1 100644 +--- a/tests/Android.build.prebuilt.mk ++++ b/tests/Android.build.prebuilt.mk +@@ -23,8 +23,8 @@ LOCAL_MODULE_CLASS := EXECUTABLES + + LOCAL_SRC_FILES_arm := prebuilt-elf-files/arm/$(bionic_tests_module) + LOCAL_SRC_FILES_arm64 := prebuilt-elf-files/arm64/$(bionic_tests_module) +-LOCAL_SRC_FILES_x86 := prebuilt-elf-files/x86/$(bionic_tests_module) +-LOCAL_SRC_FILES_x86_64 := prebuilt-elf-files/x86_64/$(bionic_tests_module) ++#LOCAL_SRC_FILES_x86 := prebuilt-elf-files/x86/$(bionic_tests_module) ++#LOCAL_SRC_FILES_x86_64 := prebuilt-elf-files/x86_64/$(bionic_tests_module) + LOCAL_SRC_FILES_mips := prebuilt-elf-files/mips/$(bionic_tests_module) + LOCAL_SRC_FILES_mips64 := prebuilt-elf-files/mips64/$(bionic_tests_module) + include $(BUILD_PREBUILT) diff --git a/build-prebuilts b/build-prebuilts new file mode 100755 index 0000000..317c759 --- /dev/null +++ b/build-prebuilts @@ -0,0 +1,385 @@ +#!/bin/sh +set -e + +# Build dependencies beyond compilers and make: +# OpenMandriva: urpmi cmake 'pkgconfig(libedit)' go lib64gmp-devel lib64mpfr-devel lib64mpc-devel gettext-devel autoconf automake libtool flex byacc +# Fedora: dnf install cmake libedit-devel golang autoconf automake libtool flex byacc + +# Some settings... +export OPTFLAGS="-O2" +# Set to "true" or "false" -- used in the context of "${WITH_TESTS} && doSomething" +export WITH_TESTS=true + +NINJA_VERSION=1.7.2 +LLVM_REV=tags/RELEASE_401/final +CLANG_VERSION=4.0.1 +GO_VERSION=1.8 +BINUTILS_VERSION=2.28 +GCC_VERSION=linaro-snapshot-6.3-2017.05 +GLIBC_VERSION=2.25 +BISON_VERSION=3.0.4 +FLEX_VERSION=2.5.39 + +ARCH=`uname -m` +[ "$ARCH" = "aarch64" ] && ARCH=arm64 +OS="`uname -s |tr A-Z a-z`" + +MYDIR="$(realpath $(dirname $0))" + +# Enough settings - let's get to work +MFLAGS="-j$(getconf _NPROCESSORS_ONLN)" +GCC_V=$(echo ${GCC_VERSION} |sed -e 's,^[a-z-]*,,;s,-.*,,') + +mkdir -p prebuilts-tmp +cd prebuilts-tmp +export TOPDIR="$(pwd)" +export OUTDIR="${TOPDIR}/out" +export PATH=${OUTDIR}/prebuilts/build-tools/${OS}-${ARCH}/bin:${OUTDIR}/prebuilts/clang/host/${OS}-${ARCH}/clang-${CLANG_VERSION}/bin:${OUTDIR}/prebuilts/go/${OS}-${ARCH}/bin:${OUTDIR}/prebuilts/gcc/${OS}-${ARCH}/host/$(uname -m)-${OS}-glibc${GLIBC_VERSION}-${GCC_V}/bin:${PATH} + +status() { + echo -e "\e[44m$@\e[49m" +} + +############################################################################## +### Build ninja first (so we can use it for building llvm too) ### +############################################################################## +status Building ninja +[ -d ninja ] || git clone -b v${NINJA_VERSION} git://github.com/ninja-build/ninja.git +cd ninja +export CFLAGS="${OPTFLAGS}" +export LDFLAGS="${OPTFLAGS}" +./configure.py --bootstrap +./ninja +if ${WITH_TESTS}; then + ./ninja ninja_test + ./ninja_test +fi +cd .. +mkdir -p ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ +cp ninja/ninja ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ + +############################################################################## +### Build llvm, clang and friends ### +############################################################################## +status Building LLVM +mkdir -p llvm +cd llvm + +if [ -z "USE_AOSP_CLANG" ]; then + repo init -u https://android.googlesource.com/platform/manifest -b llvm + repo sync + cd build/soong + patch -p1 <${MYDIR}/build_soong-aarch64-host.patch + cd ../.. +else + if [ -d llvm ]; then + cd llvm + svn up + cd tools/clang + svn up + cd ../polly + svn up + cd ../clang/tools/extra + svn up + cd ../../../../projects/compiler-rt + svn up + cd ../libunwind + svn up + cd ../../tools/lldb + svn up + cd ../lld + svn up + cd ../../projects/openmp + svn up + cd ../libcxx + svn up + cd ../libcxxabi + svn up + cd ../../.. + else + svn co http://llvm.org/svn/llvm-project/llvm/$LLVM_REV llvm + svn co http://llvm.org/svn/llvm-project/cfe/$LLVM_REV llvm/tools/clang + svn co http://llvm.org/svn/llvm-project/polly/$LLVM_REV llvm/tools/polly + svn co http://llvm.org/svn/llvm-project/clang-tools-extra/$LLVM_REV llvm/tools/clang/tools/extra + svn co http://llvm.org/svn/llvm-project/compiler-rt/$LLVM_REV llvm/projects/compiler-rt + svn co http://llvm.org/svn/llvm-project/libunwind/$LLVM_REV llvm/projects/libunwind + svn co http://llvm.org/svn/llvm-project/lldb/$LLVM_REV llvm/tools/lldb + svn co http://llvm.org/svn/llvm-project/lld/$LLVM_REV llvm/tools/lld + svn co http://llvm.org/svn/llvm-project/openmp/$LLVM_REV llvm/projects/openmp + svn co http://llvm.org/svn/llvm-project/libcxx/$LLVM_REV llvm/projects/libcxx + svn co http://llvm.org/svn/llvm-project/libcxxabi/$LLVM_REV llvm/projects/libcxxabi + cd llvm + patch -p1 <$MYDIR/llvm-4.0-libc++-libc++abi-dependency.patch + cd .. + fi +fi + +# Needed for std::bind in some versions of libstdc++ +grep -q '<functional>' llvm/tools/lldb/include/lldb/Utility/TaskPool.h || sed -i -e '/#include <future>/i#include <functional>' llvm/tools/lldb/include/lldb/Utility/TaskPool.h + +cd llvm +mkdir -p build/clang-${CLANG_VERSION} build/lib/python2.7 +cd build +cmake -G Ninja ../ \ + -DCMAKE_BUILD_TYPE=Release \ + -DPYTHON_EXECUTABLE=/usr/bin/python2 \ + -DLLVM_ENABLE_CXX1Y:BOOL=ON \ + -DLLVM_ENABLE_RTTI:BOOL=ON \ + -DLLVM_ENABLE_EH:BOOL=ON \ + -DLIBCXX_CXX_ABI=libcxxabi \ + -DLIBCXX_ENABLE_CXX1Y:BOOL=ON \ + -DLIBCXXABI_LIBCXX_INCLUDES=$(pwd)/../projects/libcxx/include \ + -DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(pwd)/../projects/libcxxabi/include \ + -DCMAKE_SHARED_LINKER_FLAGS="-L$(pwd)/lib" \ + -DLIBCXXABI_USE_LLVM_UNWINDER:BOOL=ON \ + -DCMAKE_INSTALL_PREFIX=./clang-${CLANG_VERSION} \ + -DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64;Mips" \ + -DLLVM_ENABLE_LIBCXX:BOOL=ON \ + -DLLVM_ENABLE_LIBCXXABI:BOOL=ON \ + -DCMAKE_C_COMPILER=gcc \ + -DCMAKE_CXX_COMPILER=g++ +${TOPDIR}/ninja/ninja install +cd ../../.. + +# Headers for cross-compiling libFuzzer +if [ -d development ]; then + cd development + git pull + cd .. +else + git clone https://android.googlesource.com/platform/development.git +fi +if [ -d ndk ]; then + cd ndk + git pull + cd .. +else + git clone https://android.googlesource.com/platform/prebuilts/ndk.git + cd ndk + patch -p1 <${MYDIR}/ndk-libc++-bionic.patch + cd .. +fi + +cd llvm/llvm/lib/Fuzzer +# FIXME should also build mips64 variant once we have the right binutils +for i in host arm aarch64 i386 x86_64 mips; do + case $i in + aarch64) + NDKARCH=arm64 + ;; + i386) + NDKARCH=x86 + ;; + *) + NDKARCH=$i + ;; + esac + target="" + case $i in + host) + ;; + arm) + target="-target arm-linux-androideabi -isystem ${TOPDIR}/ndk/r11/platforms/android-24/arch-$i/usr/include -isystem ${TOPDIR}/ndk/r13/sources/cxx-stl/llvm-libc++/include" + ;; + *) + target="-target $i-linux-android -isystem ${TOPDIR}/ndk/r11/platforms/android-24/arch-$NDKARCH/usr/include -isystem ${TOPDIR}/ndk/r13/sources/cxx-stl/llvm-libc++/include" + ;; + esac + mkdir -p $i + cd $i + set -x + for j in ../*.cpp; do + clang $target -std=c++11 -g -O2 -fno-omit-frame-pointer -o $(basename $j |sed -e 's,\.cpp,.o,') -c $j + done + ar ru libFuzzer.a *.o + ranlib libFuzzer.a + mkdir -p ${OUTDIR}/prebuilts/clang/host/$OS-$ARCH/clang-${CLANG_VERSION}/lib64/clang/$(echo ${CLANG_VERSION} |cut -d. -f1-2)/lib/$OS/$i + cp -f libFuzzer.a ${OUTDIR}/prebuilts/clang/host/$OS-$ARCH/clang-${CLANG_VERSION}/lib64/clang/$(echo ${CLANG_VERSION} |cut -d. -f1-2)/lib/$OS/$i/ + set +x + cd .. +done +cd ../../../.. + +cp -a llvm/llvm/build/clang-${CLANG_VERSION}/* ${OUTDIR}/prebuilts/clang/host/$OS-$ARCH/clang-${CLANG_VERSION} +mkdir -p ${OUTDIR}/prebuilts/clang/host/$OS-$ARCH/clang-${CLANG_VERSION}/prebuilt_include/llvm/lib/Fuzzer/ +cp -af llvm/llvm/lib/Fuzzer/*.h ${OUTDIR}/prebuilts/clang/host/$OS-$ARCH/clang-${CLANG_VERSION}/prebuilt_include/llvm/lib/Fuzzer/ + +EVIL_WORKAROUND=true +if $EVIL_WORKAROUND; then + # FIXME this is WRONG, but somehow soong doesn't pick up libFuzzer in the right place. + # Probably there's still a linux-x86 hardcode somewhere. + for i in host arm aarch64 i386 x86_64 mips; do + mkdir -p ${OUTDIR}/prebuilts/clang/host/linux-x86/clang-${CLANG_VERSION}/lib64/clang/$(echo ${CLANG_VERSION} |cut -d. -f1-2)/lib/$OS/$i/ + cp -a ${OUTDIR}/prebuilts/clang/host/$OS-$ARCH/clang-${CLANG_VERSION}/lib64/clang/$(echo ${CLANG_VERSION} |cut -d. -f1-2)/lib/$OS/$i/libFuzzer.a ${OUTDIR}/prebuilts/clang/host/linux-x86/clang-${CLANG_VERSION}/lib64/clang/$(echo ${CLANG_VERSION} |cut -d. -f1-2)/lib/$OS/$i/ + done + mkdir -p ${OUTDIR}/prebuilts/clang/host/linux-x86/clang-${CLANG_VERSION}/prebuilt_include/llvm/lib/Fuzzer + cp -af llvm/llvm/lib/Fuzzer/*.h ${OUTDIR}/prebuilts/clang/host/linux-x86/clang-${CLANG_VERSION}/prebuilt_include/llvm/lib/Fuzzer/ +fi + + +############################################################################## +### Build go ### +############################################################################## +status Building go +[ -d go ] || git clone https://go.googlesource.com/go -b go${GO_VERSION} +cd go + +unset GOROOT || : +unset GOBIN || : +export GOROOT_BOOTSTRAP=$(/usr/bin/go env |grep ^GOROOT= |cut -d= -f2 |sed -e 's,",,g') + +export GOHOSTOS="$(uname |tr A-Z a-z)" +export GOHOSTARCH="$(uname -m)" +case "${GOHOSTARCH}" in +aarch64) + export GOHOSTARCH=arm64 + ;; +x86_64) + export GOHOSTARCH=amd64 + ;; +esac +cd src +CFLAGS="${OPTFLAGS}" LDFLAGS="${OPTFLAGS}" CC_FOR_TARGET=clang CXX_FOR_TARGET=clang++ GOOS=${GOHOSTOS} GOARCH=${GOHOSTARCH} ./make.bash +echo "make.bash finished" +unset GOROOT +unset GOBIN +unset GOROOT_BOOTSTRAP +unset GOHOSTOS +unset GOHOSTARCH +cd ../.. +mkdir -p ${OUTDIR}/prebuilts/go/$OS-$ARCH +cp -a go/* ${OUTDIR}/prebuilts/go/$OS-$ARCH/ +export GOROOT=${OUTDIR}/prebuilts/go/${OS}-${ARCH} + +############################################################################## +### Build kati and ckati ### +############################################################################## +[ -d kati ] || git clone https://android.googlesource.com/platform/build/kati +cd kati +status Building ckati +make ${MFLAGS} -f Makefile.ckati +status Building kati +make ${MFLAGS} -f Makefile.kati +# FIXME ckati_stamp_dump is supposed to be built through Android.bp once we have soong +status building ckati_stamp_dump +clang++ -O2 -std=c++14 -o ckati_stamp_dump regen_dump.cc affinity.cc command.cc dep.cc eval.cc exec.cc expr.cc file.cc file_cache.cc fileutil.cc find.cc flags.cc func.cc io.cc log.cc ninja.cc parser.cc regen.cc rule.cc stats.cc stmt.cc string_piece.cc stringprintf.cc strutil.cc symtab.cc thread_pool.cc timeutil.cc var.cc version_unknown.cc -lpthread +mkdir -p ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ +cp -a ckati ckati_stamp_dump ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ +# We also build out/bin/kati, but for now that's not needed in prebuilts +cd .. + +############################################################################## +### Build makeparallel, ijar, ziptime, acp ### +############################################################################## +[ -d build ] || git clone https://android.googlesource.com/platform/build/ +status Building makeparallel +cd build/tools/makeparallel +make ${MFLAGS} +cp makeparallel ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ + +status Building ijar +cd ../ijar +clang++ -std=c++14 -O2 -o ijar {classfile,ijar,zip}.cc -lz +cp ijar ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ + +status Building ziptime +cd ../ziptime +clang++ -std=c++14 -O2 -o ziptime *.cpp +cp ziptime ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ + +status Building acp +cd ../acp +clang -O2 -o acp *.c ${TOPDIR}/build/tools/libhost/*.c -I${TOPDIR}/build/tools/libhost/include +cp acp ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ + +cd ../../.. + +############################################################################## +### Build bpfmt ### +############################################################################## +status Building bpfmt +cd build +[ -d blueprint ] || git clone https://android.googlesource.com/platform/build/blueprint +[ -d blueprint-bin ] || mkdir blueprint-bin +cd blueprint-bin +status Building bpfmt +bash ../blueprint/bootstrap.bash +ninja -f .minibootstrap/build.ninja +ninja -f .bootstrap/build.ninja +cd ../blueprint + +GOROOT=${OUTDIR}/prebuilts/go/$OS-$ARCH go get github.com/google/blueprint/parser +cd bpfmt +go build bpfmt.go +cp bpfmt ${OUTDIR}/prebuilts/build-tools/$OS-$ARCH/bin/ +cd ../../.. + +############################################################################## +### Binutils/gcc based toolchains ### +############################################################################## +status Downloading binutils and gcc +if ! [ -d binutils-${BINUTILS_VERSION} ]; then + wget http://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.bz2 + tar xf binutils-${BINUTILS_VERSION}.tar.bz2 +fi +if ! [ -d gcc-${GCC_VERSION} ]; then + if echo ${GCC_VERSION} |grep -q linaro; then + V=$(echo ${GCC_VERSION} |sed -e 's,^[a-z-]*,,') + wget http://snapshots.linaro.org/components/toolchain/gcc-linaro/${V}/gcc-${GCC_VERSION}.tar.xz + tar xf gcc-${GCC_VERSION}.tar.xz + else + wget http://ftp.gnu.org/pub/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.bz2 + tar xf gcc-${GCC_VERSION}.tar.bz2 + fi +fi + +for target in $(uname -m)-${OS}; do + status Building $target binutils + mkdir -p binutils-build-${BINUTILS_VERSION}-$target + cd binutils-build-${BINUTILS_VERSION}-$target + ../binutils-${BINUTILS_VERSION}/configure --target=$target --prefix=/prebuilts/gcc/${OS}-${ARCH}/host/${target}-glibc${GLIBC_VERSION}-${GCC_V} + make ${MFLAGS} + make ${MFLAGS} install DESTDIR="${OUTDIR}" + cd .. + + status Building $target gcc + mkdir -p gcc-build-${GCC_VERSION}-$target + cd gcc-build-${GCC_VERSION}-$target + ../gcc-${GCC_VERSION}/configure --target=$target --prefix=/prebuilts/gcc/${OS}-${ARCH}/host/${target}-glibc${GLIBC_VERSION}-${GCC_V} --enable-languages=c,c++ + make ${MFLAGS} + make ${MFLAGS} install DESTDIR="${OUTDIR}" + cd .. +done + +############################################################################## +### Build bison ### +############################################################################## +status Building bison +if ! [ -d bison-${BISON_VERSION} ]; then + wget http://ftp.gnu.org/gnu/bison/bison-${BISON_VERSION}.tar.xz + tar xf bison-${BISON_VERSION}.tar.xz +fi +mkdir -p bison-build-${BISON_VERSION} +cd bison-build-${BISON_VERSION} +../bison-${BISON_VERSION}/configure --prefix=/prebuilts/misc/${OS}-${ARCH}/bison +make ${MFLAGS} +mkdir -p "${OUTDIR}"/prebuilts/misc/${OS}-${ARCH}/bison/ +cp -a src/bison "${OUTDIR}"/prebuilts/misc/${OS}-${ARCH}/bison/ +cd .. + +############################################################################## +### Build flex ### +############################################################################## +status Building flex +[ -d flex ] || git clone -b flex-${FLEX_VERSION} https://github.com/westes/flex +cd flex +# We don't ship docs and don't want to deal with the slew of dependencies +# needed to build them... +# sed -i -e '/doc \\/d' Makefile.am +./autogen.sh +# As of 2.5.39, flex doesn't like out-of-source builds +./configure --prefix=/prebuilts/misc/${OS}-${ARCH}/flex +make ${MFLAGS} TEXI2DVI=true +mkdir -p "${OUTDIR}"/prebuilts/misc/${OS}-${ARCH}/flex/ +cp -a flex "${OUTDIR}"/prebuilts/misc/${OS}-${ARCH}/flex/flex-${FLEX_VERSION} +cd .. diff --git a/build_core-aarch64-host.patch b/build_core-aarch64-host.patch new file mode 100644 index 0000000..93368ff --- /dev/null +++ b/build_core-aarch64-host.patch @@ -0,0 +1,208 @@ +diff --git a/core/config.mk b/core/config.mk +index 5ff582a13..7ff3b368f 100644 +--- a/core/config.mk ++++ b/core/config.mk +@@ -383,7 +383,7 @@ ifeq (,$(filter 1 true,$(WITH_TIDY_ONLY))) + endif + + PATH_TO_CLANG_TIDY := \ +- $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-x86/$(LLVM_PREBUILTS_VERSION)/bin/clang-tidy ++ $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/$(LLVM_PREBUILTS_VERSION)/bin/clang-tidy + ifeq ($(wildcard $(PATH_TO_CLANG_TIDY)),) + ifneq (,$(filter 1 true,$(WITH_TIDY))) + $(warning *** Disable WITH_TIDY because $(PATH_TO_CLANG_TIDY) does not exist) +diff --git a/core/envsetup.mk b/core/envsetup.mk +index 43593e63c..acf755f15 100644 +--- a/core/envsetup.mk ++++ b/core/envsetup.mk +@@ -116,13 +116,15 @@ HOST_OS_EXTRA:=$(shell python -c "import platform; print(platform.platform())") + BUILD_OS := $(HOST_OS) + + HOST_CROSS_OS := +-# We can cross-build Windows binaries on Linux ++# We can cross-build Windows binaries on x86 Linux + ifeq ($(HOST_OS),linux) ++ifeq ($(HOST_ARCH),x86) + HOST_CROSS_OS := windows + HOST_CROSS_ARCH := x86 + HOST_CROSS_2ND_ARCH := x86_64 + 2ND_HOST_CROSS_IS_64_BIT := true + endif ++endif + + ifeq ($(HOST_OS),) + $(error Unable to determine HOST_OS from uname -sm: $(UNAME)!) +@@ -134,10 +136,15 @@ ifneq (,$(findstring x86_64,$(UNAME))) + HOST_2ND_ARCH := x86 + HOST_IS_64_BIT := true + else ++ifneq (,$(findstring aarch64,$(UNAME))) ++ HOST_ARCH := arm64 ++ HOST_IS_64_BIT := true ++else + ifneq (,$(findstring i686,$(UNAME))$(findstring x86,$(UNAME))) + $(error Building on a 32-bit x86 host is not supported: $(UNAME)!) + endif + endif ++endif + + BUILD_ARCH := $(HOST_ARCH) + BUILD_2ND_ARCH := $(HOST_2ND_ARCH) +@@ -157,8 +164,12 @@ $(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE) + endif + endif + ++ifneq (,$(findstring x86_64,$(UNAME))) + # We don't want to move all the prebuilt host tools to a $(HOST_OS)-x86_64 dir. + HOST_PREBUILT_ARCH := x86 ++else ++HOST_PREBUILT_ARCH := $(HOST_ARCH) ++endif + # This is the standard way to name a directory containing prebuilt host + # objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc + HOST_PREBUILT_TAG := $(BUILD_OS)-$(HOST_PREBUILT_ARCH) +diff --git a/core/main.mk b/core/main.mk +index bc4ed0421..34e87f6ec 100644 +--- a/core/main.mk ++++ b/core/main.mk +@@ -14,6 +14,12 @@ ifndef KATI + host_prebuilts := linux-x86 + ifeq ($(shell uname),Darwin) + host_prebuilts := darwin-x86 ++else ++ifeq (aarch64,$(shell uname -m)) ++host_prebuilts := linux-arm64 ++else ++ $(error not arm64) ++endif + endif + + .PHONY: run_soong_ui +diff --git a/core/soong_config.mk b/core/soong_config.mk +index e21083d7c..09d4b5814 100644 +--- a/core/soong_config.mk ++++ b/core/soong_config.mk +@@ -71,11 +71,11 @@ $(SOONG_VARIABLES): FORCE + echo ' "DeviceSecondaryAbi": ["$(TARGET_2ND_CPU_ABI)", "$(TARGET_2ND_CPU_ABI2)"],'; \ + echo ''; \ + echo ' "HostArch": "$(HOST_ARCH)",'; \ +- echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ + echo ''; \ +- echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ +- echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ +- echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ + echo ' "Safestack": $(if $(filter true,$(USE_SAFESTACK)),true,false),'; \ + echo ' "EnableCFI": $(if $(filter false,$(ENABLE_CFI)),false,true),'; \ + echo ' "Device_uses_hwc2": $(if $(filter true,$(TARGET_USES_HWC2)),true,false),'; \ +diff --git a/envsetup.sh b/envsetup.sh +index b71a8256a..aa400e4c7 100644 +--- a/envsetup.sh ++++ b/envsetup.sh +@@ -728,7 +728,9 @@ function getdriver() + # c++-analyzer and ccc-analyzer. + local CLANG_VERSION=$(get_build_var LLVM_PREBUILTS_VERSION) + local BUILD_OS=$(get_build_var BUILD_OS) +- local CLANG_DIR="$T/prebuilts/clang/host/${BUILD_OS}-x86/${CLANG_VERSION}" ++ local BUILD_ARCH="x86" ++ test $(uname -m) = "aarch64" && BUILD_ARCH=arm64 ++ local CLANG_DIR="$T/prebuilts/clang/host/${BUILD_OS}-${BUILD_ARCH}/${CLANG_VERSION}" + echo "\ + ${CLANG_DIR}/tools/scan-build/bin/scan-build \ + --use-analyzer ${CLANG_DIR}/bin/clang \ +diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py +index 652fadf56..17d851b3c 100644 +--- a/tools/releasetools/common.py ++++ b/tools/releasetools/common.py +@@ -38,10 +38,15 @@ from hashlib import sha1 as sha1 + + class Options(object): + def __init__(self): +- platform_search_path = { ++ if platform.processor() == 'aarch64': ++ platform_search_path = { ++ "linux2": "out/host/linux-arm64", ++ } ++ else: ++ platform_search_path = { + "linux2": "out/host/linux-x86", + "darwin": "out/host/darwin-x86", +- } ++ } + + self.search_path = platform_search_path.get(sys.platform, None) + self.signapk_path = "framework/signapk.jar" # Relative to search_path +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ core/clang/HOST_arm.mk 2017-06-08 16:05:39.563015342 +0000 +@@ -0,0 +1 @@ ++$(clang_2nd_arch_prefix)HOST_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-armv7.a +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ core/clang/HOST_arm64.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1 @@ ++HOST_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-aarch64.a +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ core/combo/HOST_linux-arm.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1,30 @@ ++# ++# Copyright (C) 2006 The Android Open Source Project ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++# Configuration for builds hosted on linux-arm. ++# Included by combo/select.mk ++ ++define $(combo_var_prefix)transform-shared-lib-to-toc ++$(call _gen_toc_command_for_elf,$(1),$(2)) ++endef ++ ++############################################################ ++## Macros after this line are shared by the 64-bit config. ++ ++# $(1): The file to check ++define get-file-size ++stat --format "%s" "$(1)" | tr -d '\n' ++endef +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ core/combo/HOST_linux-arm64.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1,27 @@ ++# ++# Copyright (C) 2006 The Android Open Source Project ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++# Configuration for builds hosted on linux-arm64. ++# Included by combo/select.mk ++ ++define $(combo_var_prefix)transform-shared-lib-to-toc ++$(call _gen_toc_command_for_elf,$(1),$(2)) ++endef ++ ++# $(1): The file to check ++define get-file-size ++stat --format "%s" "$(1)" | tr -d '\n' ++endef diff --git a/build_make-aarch64-host.patch b/build_make-aarch64-host.patch new file mode 100644 index 0000000..d864ad9 --- /dev/null +++ b/build_make-aarch64-host.patch @@ -0,0 +1,208 @@ +diff --git a/core/config.mk b/core/config.mk +index 5ff582a13..7ff3b368f 100644 +--- a/core/config.mk ++++ b/core/config.mk +@@ -383,7 +383,7 @@ ifeq (,$(filter 1 true,$(WITH_TIDY_ONLY))) + endif + + PATH_TO_CLANG_TIDY := \ +- $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-x86/$(LLVM_PREBUILTS_VERSION)/bin/clang-tidy ++ $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/$(LLVM_PREBUILTS_VERSION)/bin/clang-tidy + ifeq ($(wildcard $(PATH_TO_CLANG_TIDY)),) + ifneq (,$(filter 1 true,$(WITH_TIDY))) + $(warning *** Disable WITH_TIDY because $(PATH_TO_CLANG_TIDY) does not exist) +diff --git a/core/envsetup.mk b/core/envsetup.mk +index 43593e63c..acf755f15 100644 +--- a/core/envsetup.mk ++++ b/core/envsetup.mk +@@ -116,13 +116,15 @@ HOST_OS_EXTRA:=$(shell python -c "import platform; print(platform.platform())") + BUILD_OS := $(HOST_OS) + + HOST_CROSS_OS := +-# We can cross-build Windows binaries on Linux ++# We can cross-build Windows binaries on x86 Linux + ifeq ($(HOST_OS),linux) ++ifeq ($(HOST_ARCH),x86) + HOST_CROSS_OS := windows + HOST_CROSS_ARCH := x86 + HOST_CROSS_2ND_ARCH := x86_64 + 2ND_HOST_CROSS_IS_64_BIT := true + endif ++endif + + ifeq ($(HOST_OS),) + $(error Unable to determine HOST_OS from uname -sm: $(UNAME)!) +@@ -134,10 +136,15 @@ ifneq (,$(findstring x86_64,$(UNAME))) + HOST_2ND_ARCH := x86 + HOST_IS_64_BIT := true + else ++ifneq (,$(findstring aarch64,$(UNAME))) ++ HOST_ARCH := arm64 ++ HOST_IS_64_BIT := true ++else + ifneq (,$(findstring i686,$(UNAME))$(findstring x86,$(UNAME))) + $(error Building on a 32-bit x86 host is not supported: $(UNAME)!) + endif + endif ++endif + + BUILD_ARCH := $(HOST_ARCH) + BUILD_2ND_ARCH := $(HOST_2ND_ARCH) +@@ -157,8 +164,12 @@ $(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE) + endif + endif + ++ifneq (,$(findstring x86_64,$(UNAME))) + # We don't want to move all the prebuilt host tools to a $(HOST_OS)-x86_64 dir. + HOST_PREBUILT_ARCH := x86 ++else ++HOST_PREBUILT_ARCH := $(HOST_ARCH) ++endif + # This is the standard way to name a directory containing prebuilt host + # objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc + HOST_PREBUILT_TAG := $(BUILD_OS)-$(HOST_PREBUILT_ARCH) +diff --git a/core/main.mk b/core/main.mk +index bc4ed0421..34e87f6ec 100644 +--- a/core/main.mk ++++ b/core/main.mk +@@ -14,6 +14,12 @@ ifndef KATI + host_prebuilts := linux-x86 + ifeq ($(shell uname),Darwin) + host_prebuilts := darwin-x86 ++else ++ifeq (aarch64,$(shell uname -m)) ++host_prebuilts := linux-arm64 ++else ++ $(error not arm64) ++endif + endif + + .PHONY: run_soong_ui +diff --git a/core/soong_config.mk b/core/soong_config.mk +index e21083d7c..09d4b5814 100644 +--- a/core/soong_config.mk ++++ b/core/soong_config.mk +@@ -71,11 +71,11 @@ $(SOONG_VARIABLES): FORCE + echo ' "DeviceSecondaryAbi": ["$(TARGET_2ND_CPU_ABI)", "$(TARGET_2ND_CPU_ABI2)"],'; \ + echo ''; \ + echo ' "HostArch": "$(HOST_ARCH)",'; \ +- echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ + echo ''; \ +- echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ +- echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ +- echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ + echo ' "Safestack": $(if $(filter true,$(USE_SAFESTACK)),true,false),'; \ + echo ' "EnableCFI": $(if $(filter false,$(ENABLE_CFI)),false,true),'; \ + echo ' "Device_uses_hwc2": $(if $(filter true,$(TARGET_USES_HWC2)),true,false),'; \ +diff --git a/envsetup.sh b/envsetup.sh +index b71a8256a..aa400e4c7 100644 +--- a/envsetup.sh ++++ b/envsetup.sh +@@ -728,7 +728,9 @@ function getdriver() + # c++-analyzer and ccc-analyzer. + local CLANG_VERSION=$(get_build_var LLVM_PREBUILTS_VERSION) + local BUILD_OS=$(get_build_var BUILD_OS) +- local CLANG_DIR="$T/prebuilts/clang/host/${BUILD_OS}-x86/${CLANG_VERSION}" ++ local BUILD_ARCH="x86" ++ test $(uname -m) = "aarch64" && BUILD_ARCH=arm64 ++ local CLANG_DIR="$T/prebuilts/clang/host/${BUILD_OS}-${BUILD_ARCH}/${CLANG_VERSION}" + echo "\ + ${CLANG_DIR}/tools/scan-build/bin/scan-build \ + --use-analyzer ${CLANG_DIR}/bin/clang \ +diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py +index 652fadf56..17d851b3c 100644 +--- a/tools/releasetools/common.py ++++ b/tools/releasetools/common.py +@@ -38,10 +38,15 @@ from hashlib import sha1 as sha1 + + class Options(object): + def __init__(self): +- platform_search_path = { ++ if platform.processor() == 'aarch64': ++ platform_search_path = { ++ "linux2": "out/host/linux-arm64", ++ } ++ else: ++ platform_search_path = { + "linux2": "out/host/linux-x86", + "darwin": "out/host/darwin-x86", +- } ++ } + + self.search_path = platform_search_path.get(sys.platform, None) + self.signapk_path = "framework/signapk.jar" # Relative to search_path +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ make/core/clang/HOST_arm.mk 2017-06-08 16:05:39.563015342 +0000 +@@ -0,0 +1 @@ ++$(clang_2nd_arch_prefix)HOST_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-armv7.a +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ make/core/clang/HOST_arm64.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1 @@ ++HOST_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-aarch64.a +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ make/core/combo/HOST_linux-arm.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1,30 @@ ++# ++# Copyright (C) 2006 The Android Open Source Project ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++# Configuration for builds hosted on linux-arm. ++# Included by combo/select.mk ++ ++define $(combo_var_prefix)transform-shared-lib-to-toc ++$(call _gen_toc_command_for_elf,$(1),$(2)) ++endef ++ ++############################################################ ++## Macros after this line are shared by the 64-bit config. ++ ++# $(1): The file to check ++define get-file-size ++stat --format "%s" "$(1)" | tr -d '\n' ++endef +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ make/core/combo/HOST_linux-arm64.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1,27 @@ ++# ++# Copyright (C) 2006 The Android Open Source Project ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++# Configuration for builds hosted on linux-arm64. ++# Included by combo/select.mk ++ ++define $(combo_var_prefix)transform-shared-lib-to-toc ++$(call _gen_toc_command_for_elf,$(1),$(2)) ++endef ++ ++# $(1): The file to check ++define get-file-size ++stat --format "%s" "$(1)" | tr -d '\n' ++endef diff --git a/build_soong-aarch64-host.patch b/build_soong-aarch64-host.patch new file mode 100644 index 0000000..e07442e --- /dev/null +++ b/build_soong-aarch64-host.patch @@ -0,0 +1,496 @@ +diff --git a/Android.bp b/Android.bp +index 9f508d5..3f9a90d 100644 +--- a/Android.bp ++++ b/Android.bp +@@ -95,6 +95,7 @@ bootstrap_go_package { + "cc/config/x86_device.go", + "cc/config/x86_64_device.go", + ++ "cc/config/arm64_linux_host.go", + "cc/config/x86_darwin_host.go", + "cc/config/x86_linux_host.go", + "cc/config/x86_linux_bionic_host.go", +diff --git a/android/arch.go b/android/arch.go +index effd5a6..19ca724 100644 +--- a/android/arch.go ++++ b/android/arch.go +@@ -200,7 +200,7 @@ var ( + Android = NewOsType("android", Device, false) + + osArchTypeMap = map[OsType][]ArchType{ +- Linux: []ArchType{X86, X86_64}, ++ Linux: []ArchType{Arm64, X86, X86_64}, + LinuxBionic: []ArchType{X86_64}, + Darwin: []ArchType{X86, X86_64}, + Windows: []ArchType{X86, X86_64}, +@@ -800,6 +800,7 @@ func decodeTargetProductVariables(config *config) (map[OsClass][]Target, error) + } + + if config.Host_bionic != nil && *config.Host_bionic { ++ addTarget(LinuxBionic, "arm64", nil, nil, nil) + addTarget(LinuxBionic, "x86_64", nil, nil, nil) + } + +diff --git a/android/config.go b/android/config.go +index 869a5c4..f3fa60d 100644 +--- a/android/config.go ++++ b/android/config.go +@@ -267,7 +267,12 @@ func (c *config) HostSystemTool(name string) string { + func (c *config) PrebuiltOS() string { + switch runtime.GOOS { + case "linux": +- return "linux-x86" ++ if runtime.GOARCH == "x86_64" { ++ panic("FIXME x86") ++ return "linux-x86" ++ } else { ++ return "linux-" + runtime.GOARCH ++ } + case "darwin": + return "darwin-x86" + default: +diff --git a/android/paths.go b/android/paths.go +index aa06127..13a60b8 100644 +--- a/android/paths.go ++++ b/android/paths.go +@@ -18,6 +18,7 @@ import ( + "fmt" + "path/filepath" + "reflect" ++ "runtime" + "strings" + + "github.com/google/blueprint" +@@ -686,7 +687,11 @@ func PathForModuleInstall(ctx ModuleContext, pathComponents ...string) OutputPat + } + outPaths = []string{"target", "product", ctx.AConfig().DeviceName(), partition} + } else { +- outPaths = []string{"host", ctx.Os().String() + "-x86"} ++ if runtime.GOARCH == "x86_64" { ++ outPaths = []string{"host", ctx.Os().String() + "-x86"} ++ } else { ++ outPaths = []string{"host", ctx.Os().String() + "-" + runtime.GOARCH} ++ } + } + if ctx.Debug() { + outPaths = append([]string{"debug"}, outPaths...) +diff --git a/bootstrap.bash b/bootstrap.bash +index e48f480..95814eb 100755 +--- a/bootstrap.bash ++++ b/bootstrap.bash +@@ -22,19 +22,33 @@ export TOPNAME="Android.bp" + export BOOTSTRAP_MANIFEST="${SRCDIR}/build/soong/build.ninja.in" + export RUN_TESTS="-t" + ++case $(uname -m) in ++ x86_64) ++ ARCH=x86 ++ export GOARCH="amd64" ++ ;; ++ aarch64) ++ ARCH=arm64 ++ export GOARCH="arm64" ++ ;; ++ *) ++ ARCH="$(uname -m)" ++ export GOARCH="$ARCH" ++ ;; ++esac ++ + case $(uname) in + Linux) + export GOOS="linux" +- export PREBUILTOS="linux-x86" ++ export PREBUILTOS="linux-${ARCH}" + ;; + Darwin) + export GOOS="darwin" +- export PREBUILTOS="darwin-x86" ++ export PREBUILTOS="darwin-${ARCH}" + ;; + *) echo "unknown OS:" $(uname) && exit 1;; + esac + export GOROOT="${SRCDIR}/prebuilts/go/$PREBUILTOS/" +-export GOARCH="amd64" + export GOCHAR="6" + + if [[ $# -eq 0 ]]; then +diff --git a/cc/binary.go b/cc/binary.go +index e982329..fba9858 100644 +--- a/cc/binary.go ++++ b/cc/binary.go +@@ -245,7 +245,7 @@ func (binary *binaryDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags + // The linux kernel expects the linker to be an + // absolute path + path := android.PathForOutput(ctx, +- "host", "linux_bionic-x86", "bin", "linker") ++ "host", "linux_bionic-x86FIXME", "bin", "linker") + if p, err := filepath.Abs(path.String()); err == nil { + flags.DynamicLinker = p + } else { +diff --git a/cc/config/x86_linux_host.go b/cc/config/x86_linux_host.go +index 80e9289..bce8cb4 100644 +--- a/cc/config/x86_linux_host.go ++++ b/cc/config/x86_linux_host.go +@@ -15,6 +15,7 @@ + package config + + import ( ++ "runtime" + "strings" + + "android/soong/android" +@@ -128,16 +129,22 @@ var ( + ) + + const ( +- linuxGccVersion = "4.8" ++ linuxGccVersion = "6.3" + ) + + func init() { + pctx.StaticVariable("LinuxGccVersion", linuxGccVersion) + +- pctx.SourcePathVariable("LinuxGccRoot", +- "prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-linux-glibc2.15-${LinuxGccVersion}") ++ if runtime.GOARCH == "arm64" { ++ pctx.StaticVariable("LinuxGccTriple", "aarch64-linux") ++ pctx.SourcePathVariable("LinuxGccRoot", ++ "prebuilts/gcc/${HostPrebuiltTag}/host/aarch64-linux-glibc2.25-${LinuxGccVersion}") ++ } else { ++ pctx.SourcePathVariable("LinuxGccRoot", ++ "prebuilts/gcc/${HostPrebuiltTag}/host/x86_64-linux-glibc2.15-${LinuxGccVersion}") + +- pctx.StaticVariable("LinuxGccTriple", "x86_64-linux") ++ pctx.StaticVariable("LinuxGccTriple", "x86_64-linux") ++ } + + pctx.StaticVariable("LinuxCflags", strings.Join(linuxCflags, " ")) + pctx.StaticVariable("LinuxLdflags", strings.Join(linuxLdflags, " ")) +diff --git a/cmd/microfactory/microfactory.bash b/cmd/microfactory/microfactory.bash +index 7489fe3..9bf47c0 100644 +--- a/cmd/microfactory/microfactory.bash ++++ b/cmd/microfactory/microfactory.bash +@@ -23,7 +23,11 @@ + # Ensure GOROOT is set to the in-tree version. + case $(uname) in + Linux) +- export GOROOT="${TOP}/prebuilts/go/linux-x86/" ++ if [ "$(uname -m)" = "aarch64" ]; then ++ export GOROOT="${TOP}/prebuilts/go/linux-arm64/" ++ else ++ export GOROOT="${TOP}/prebuilts/go/linux-x86/" ++ fi + ;; + Darwin) + export GOROOT="${TOP}/prebuilts/go/darwin-x86/" +diff --git a/root.bp b/root.bp +index 08f2ff8..5676e3f 100644 +--- a/root.bp ++++ b/root.bp +@@ -27,6 +27,7 @@ optional_subdirs = [ + "libnativehelper", + "packages/apps/*", +- "prebuilts/clang/host/linux-x86", ++// "prebuilts/clang/host/linux-x86", ++ "prebuilts/clang/host/linux-arm64", + "prebuilts/ndk", + "prebuilts/sdk", + "system/*", +diff --git a/ui/build/config.go b/ui/build/config.go +index 7e8091b..38c1af1 100644 +--- a/ui/build/config.go ++++ b/ui/build/config.go +@@ -388,7 +388,12 @@ func (c *configImpl) hostCrossOut() string { + + func (c *configImpl) HostPrebuiltTag() string { + if runtime.GOOS == "linux" { +- return "linux-x86" ++ if runtime.GOARCH == "x86_64" { ++ panic("FIXME x86") ++ return "linux-x86" ++ } else { ++ return "linux-" + runtime.GOARCH ++ } + } else if runtime.GOOS == "darwin" { + return "darwin-x86" + } else { +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ soong/cc/config/arm64_linux_host.go 2017-06-08 16:03:35.191891546 +0000 +@@ -0,0 +1,276 @@ ++// Copyright 2016 Google Inc. All rights reserved. ++// ++// Licensed under the Apache License, Version 2.0 (the "License"); ++// you may not use this file except in compliance with the License. ++// You may obtain a copy of the License at ++// ++// http://www.apache.org/licenses/LICENSE-2.0 ++// ++// Unless required by applicable law or agreed to in writing, software ++// distributed under the License is distributed on an "AS IS" BASIS, ++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++// See the License for the specific language governing permissions and ++// limitations under the License. ++ ++package config ++ ++import ( ++ "strings" ++ ++ "android/soong/android" ++) ++ ++var ( ++ /* linuxCflags = []string{ ++ "-fno-exceptions", // from build/core/combo/select.mk ++ "-Wno-multichar", // from build/core/combo/select.mk ++ ++ "-fdiagnostics-color", ++ ++ "-Wa,--noexecstack", ++ ++ "-fPIC", ++ "-no-canonical-prefixes", ++ ++ "-U_FORTIFY_SOURCE", ++ "-D_FORTIFY_SOURCE=2", ++ "-fstack-protector", ++ ++ // Workaround differences in inttypes.h between host and target. ++ //See bug 12708004. ++ "-D__STDC_FORMAT_MACROS", ++ "-D__STDC_CONSTANT_MACROS", ++ ++ // HOST_RELEASE_CFLAGS ++ "-O2", // from build/core/combo/select.mk ++ "-g", // from build/core/combo/select.mk ++ "-fno-strict-aliasing", // from build/core/combo/select.mk ++ } ++ ++ linuxLdflags = []string{ ++ "-Wl,-z,noexecstack", ++ "-Wl,-z,relro", ++ "-Wl,-z,now", ++ "-Wl,--no-undefined-version", ++ } */ ++ ++ // Extended cflags ++ linuxARMCflags = []string{ ++ "-mfpu=neon", ++ "-m32", ++ "-march=armv7hl", ++ "-D_FILE_OFFSET_BITS=64", ++ "-D_LARGEFILE_SOURCE=1", ++ } ++ ++ linuxARM64Cflags = []string{ ++ "-m64", ++ } ++ ++ linuxARMLdflags = []string{ ++ "-m32", ++ } ++ ++ linuxARM64Ldflags = []string{ ++ "-m64", ++ } ++ ++/* linuxClangCflags = append(ClangFilterUnknownCflags(linuxCflags), []string{ ++ "--gcc-toolchain=${LinuxGccRoot}", ++ "--sysroot ${LinuxGccRoot}/sysroot", ++ "-fstack-protector-strong", ++ }...) ++ ++ linuxClangLdflags = append(ClangFilterUnknownCflags(linuxLdflags), []string{ ++ "--gcc-toolchain=${LinuxGccRoot}", ++ "--sysroot ${LinuxGccRoot}/sysroot", ++ }...) */ ++ ++ linuxARMClangLdflags = append(ClangFilterUnknownCflags(linuxARMLdflags), []string{ ++ "-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32", ++ "-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}/32", ++ "-L${LinuxGccRoot}/${LinuxGccTriple}/lib32", ++ }...) ++ ++ linuxARM64ClangLdflags = append(ClangFilterUnknownCflags(linuxARM64Ldflags), []string{ ++ "-B${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}", ++ "-L${LinuxGccRoot}/lib/gcc/${LinuxGccTriple}/${LinuxGccVersion}", ++ "-L${LinuxGccRoot}/${LinuxGccTriple}/lib64", ++ }...) ++ ++/* linuxClangCppflags = []string{ ++ "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}", ++ "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}/backward", ++ } */ ++ ++ linuxARMClangCppflags = []string{ ++ "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}/${LinuxGccTriple}/32", ++ } ++ ++ linuxARM64ClangCppflags = []string{ ++ "-isystem ${LinuxGccRoot}/${LinuxGccTriple}/include/c++/${LinuxGccVersion}/${LinuxGccTriple}", ++ } ++ ++/* linuxAvailableLibraries = addPrefix([]string{ ++ "c", ++ "dl", ++ "gcc", ++ "gcc_s", ++ "m", ++ "ncurses", ++ "pthread", ++ "resolv", ++ "rt", ++ "util", ++ "z", ++ }, "-l") */ ++) ++ ++/*const ( ++ linuxGccVersion = "4.8" ++)*/ ++ ++func init() { ++/* pctx.StaticVariable("LinuxGccVersion", linuxGccVersion) ++ ++ pctx.SourcePathVariable("LinuxGccRoot", ++ "prebuilts/gcc/${HostPrebuiltTag}/host/aarch64-linux-glibc2.15-${LinuxGccVersion}") ++ ++ pctx.StaticVariable("LinuxGccTriple", "aarch64-linux") ++ ++ pctx.StaticVariable("LinuxCflags", strings.Join(linuxCflags, " ")) ++ pctx.StaticVariable("LinuxLdflags", strings.Join(linuxLdflags, " ")) ++ ++ pctx.StaticVariable("LinuxClangCflags", strings.Join(linuxClangCflags, " ")) ++ pctx.StaticVariable("LinuxClangLdflags", strings.Join(linuxClangLdflags, " ")) ++ pctx.StaticVariable("LinuxClangCppflags", strings.Join(linuxClangCppflags, " ")) */ ++ ++ // Extended cflags ++ pctx.StaticVariable("LinuxARMCflags", strings.Join(linuxARMCflags, " ")) ++ pctx.StaticVariable("LinuxARM64Cflags", strings.Join(linuxARM64Cflags, " ")) ++ pctx.StaticVariable("LinuxARMLdflags", strings.Join(linuxARMLdflags, " ")) ++ pctx.StaticVariable("LinuxARM64Ldflags", strings.Join(linuxARM64Ldflags, " ")) ++ ++ pctx.StaticVariable("LinuxARMClangCflags", ++ strings.Join(ClangFilterUnknownCflags(linuxARMCflags), " ")) ++ pctx.StaticVariable("LinuxARM64ClangCflags", ++ strings.Join(ClangFilterUnknownCflags(linuxARM64Cflags), " ")) ++ pctx.StaticVariable("LinuxARMClangLdflags", strings.Join(linuxARMClangLdflags, " ")) ++ pctx.StaticVariable("LinuxARM64ClangLdflags", strings.Join(linuxARM64ClangLdflags, " ")) ++ pctx.StaticVariable("LinuxARMClangCppflags", strings.Join(linuxARMClangCppflags, " ")) ++ pctx.StaticVariable("LinuxARM64ClangCppflags", strings.Join(linuxARM64ClangCppflags, " ")) ++} ++ ++/*type toolchainLinux struct { ++ cFlags, ldFlags string ++}*/ ++ ++type toolchainLinuxARM struct { ++ toolchain32Bit ++ toolchainLinux ++} ++ ++type toolchainLinuxARM64 struct { ++ toolchain64Bit ++ toolchainLinux ++} ++ ++func (t *toolchainLinuxARM) Name() string { ++ return "arm" ++} ++ ++func (t *toolchainLinuxARM64) Name() string { ++ return "arm64" ++} ++ ++/* func (t *toolchainLinux) GccRoot() string { ++ return "${config.LinuxGccRoot}" ++} ++ ++func (t *toolchainLinux) GccTriple() string { ++ return "${config.LinuxGccTriple}" ++} ++ ++func (t *toolchainLinux) GccVersion() string { ++ return linuxGccVersion ++}*/ ++ ++func (t *toolchainLinuxARM) Cflags() string { ++ return "${config.LinuxCflags} ${config.LinuxARMCflags}" ++} ++ ++func (t *toolchainLinuxARM64) Cflags() string { ++ return "${config.LinuxCflags} ${config.LinuxARM64Cflags}" ++} ++ ++/*func (t *toolchainLinux) Cppflags() string { ++ return "" ++}*/ ++ ++func (t *toolchainLinuxARM) Ldflags() string { ++ return "${config.LinuxLdflags} ${config.LinuxARMLdflags}" ++} ++ ++func (t *toolchainLinuxARM64) Ldflags() string { ++ return "${config.LinuxLdflags} ${config.LinuxARM64Ldflags}" ++} ++ ++/*func (t *toolchainLinux) IncludeFlags() string { ++ return "" ++}*/ ++ ++func (t *toolchainLinuxARM) ClangTriple() string { ++ return "armv7hl-linux-gnu" ++} ++ ++func (t *toolchainLinuxARM) ClangCflags() string { ++ return "${config.LinuxClangCflags} ${config.LinuxARMClangCflags}" ++} ++ ++func (t *toolchainLinuxARM) ClangCppflags() string { ++ return "${config.LinuxClangCppflags} ${config.LinuxARMClangCppflags}" ++} ++ ++func (t *toolchainLinuxARM64) ClangTriple() string { ++ return "aarch64-linux-gnu" ++} ++ ++func (t *toolchainLinuxARM64) ClangCflags() string { ++ return "${config.LinuxClangCflags} ${config.LinuxARM64ClangCflags}" ++} ++ ++func (t *toolchainLinuxARM64) ClangCppflags() string { ++ return "${config.LinuxClangCppflags} ${config.LinuxARM64ClangCppflags}" ++} ++ ++func (t *toolchainLinuxARM) ClangLdflags() string { ++ return "${config.LinuxClangLdflags} ${config.LinuxARMClangLdflags}" ++} ++ ++func (t *toolchainLinuxARM64) ClangLdflags() string { ++ return "${config.LinuxClangLdflags} ${config.LinuxARM64ClangLdflags}" ++} ++ ++/*func (t *toolchainLinux) AvailableLibraries() []string { ++ return linuxAvailableLibraries ++} ++ ++func (t *toolchainLinux) Bionic() bool { ++ return false ++}*/ ++ ++var toolchainLinuxARMSingleton Toolchain = &toolchainLinuxARM{} ++var toolchainLinuxARM64Singleton Toolchain = &toolchainLinuxARM64{} ++ ++func linuxARMToolchainFactory(arch android.Arch) Toolchain { ++ return toolchainLinuxARMSingleton ++} ++ ++func linuxARM64ToolchainFactory(arch android.Arch) Toolchain { ++ return toolchainLinuxARM64Singleton ++} ++ ++func init() { ++ registerToolchainFactory(android.Linux, android.Arm, linuxARMToolchainFactory) ++ registerToolchainFactory(android.Linux, android.Arm64, linuxARM64ToolchainFactory) ++} diff --git a/build_tools-aarch64-host.patch b/build_tools-aarch64-host.patch new file mode 100644 index 0000000..256970e --- /dev/null +++ b/build_tools-aarch64-host.patch @@ -0,0 +1,208 @@ +diff --git a/core/config.mk b/core/config.mk +index 5ff582a13..7ff3b368f 100644 +--- a/core/config.mk ++++ b/core/config.mk +@@ -383,7 +383,7 @@ ifeq (,$(filter 1 true,$(WITH_TIDY_ONLY))) + endif + + PATH_TO_CLANG_TIDY := \ +- $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-x86/$(LLVM_PREBUILTS_VERSION)/bin/clang-tidy ++ $(LLVM_PREBUILTS_BASE)/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/$(LLVM_PREBUILTS_VERSION)/bin/clang-tidy + ifeq ($(wildcard $(PATH_TO_CLANG_TIDY)),) + ifneq (,$(filter 1 true,$(WITH_TIDY))) + $(warning *** Disable WITH_TIDY because $(PATH_TO_CLANG_TIDY) does not exist) +diff --git a/core/envsetup.mk b/core/envsetup.mk +index 43593e63c..acf755f15 100644 +--- a/core/envsetup.mk ++++ b/core/envsetup.mk +@@ -116,13 +116,15 @@ HOST_OS_EXTRA:=$(shell python -c "import platform; print(platform.platform())") + BUILD_OS := $(HOST_OS) + + HOST_CROSS_OS := +-# We can cross-build Windows binaries on Linux ++# We can cross-build Windows binaries on x86 Linux + ifeq ($(HOST_OS),linux) ++ifeq ($(HOST_ARCH),x86) + HOST_CROSS_OS := windows + HOST_CROSS_ARCH := x86 + HOST_CROSS_2ND_ARCH := x86_64 + 2ND_HOST_CROSS_IS_64_BIT := true + endif ++endif + + ifeq ($(HOST_OS),) + $(error Unable to determine HOST_OS from uname -sm: $(UNAME)!) +@@ -134,10 +136,15 @@ ifneq (,$(findstring x86_64,$(UNAME))) + HOST_2ND_ARCH := x86 + HOST_IS_64_BIT := true + else ++ifneq (,$(findstring aarch64,$(UNAME))) ++ HOST_ARCH := arm64 ++ HOST_IS_64_BIT := true ++else + ifneq (,$(findstring i686,$(UNAME))$(findstring x86,$(UNAME))) + $(error Building on a 32-bit x86 host is not supported: $(UNAME)!) + endif + endif ++endif + + BUILD_ARCH := $(HOST_ARCH) + BUILD_2ND_ARCH := $(HOST_2ND_ARCH) +@@ -157,8 +164,12 @@ $(error HOST_BUILD_TYPE must be either release or debug, not '$(HOST_BUILD_TYPE) + endif + endif + ++ifneq (,$(findstring x86_64,$(UNAME))) + # We don't want to move all the prebuilt host tools to a $(HOST_OS)-x86_64 dir. + HOST_PREBUILT_ARCH := x86 ++else ++HOST_PREBUILT_ARCH := $(HOST_ARCH) ++endif + # This is the standard way to name a directory containing prebuilt host + # objects. E.g., prebuilt/$(HOST_PREBUILT_TAG)/cc + HOST_PREBUILT_TAG := $(BUILD_OS)-$(HOST_PREBUILT_ARCH) +diff --git a/core/main.mk b/core/main.mk +index bc4ed0421..34e87f6ec 100644 +--- a/core/main.mk ++++ b/core/main.mk +@@ -14,6 +14,12 @@ ifndef KATI + host_prebuilts := linux-x86 + ifeq ($(shell uname),Darwin) + host_prebuilts := darwin-x86 ++else ++ifeq (aarch64,$(shell uname -m)) ++host_prebuilts := linux-arm64 ++else ++ $(error not arm64) ++endif + endif + + .PHONY: run_soong_ui +diff --git a/core/soong_config.mk b/core/soong_config.mk +index e21083d7c..09d4b5814 100644 +--- a/core/soong_config.mk ++++ b/core/soong_config.mk +@@ -71,11 +71,11 @@ $(SOONG_VARIABLES): FORCE + echo ' "DeviceSecondaryAbi": ["$(TARGET_2ND_CPU_ABI)", "$(TARGET_2ND_CPU_ABI2)"],'; \ + echo ''; \ + echo ' "HostArch": "$(HOST_ARCH)",'; \ +- echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "HostSecondaryArch": "$(HOST_2ND_ARCH)",'; \ + echo ''; \ +- echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ +- echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ +- echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHost": "$(HOST_CROSS_OS)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHostArch": "$(HOST_CROSS_ARCH)",'; \ ++ test $(shell uname -m) = aarch64 || echo ' "CrossHostSecondaryArch": "$(HOST_CROSS_2ND_ARCH)",'; \ + echo ' "Safestack": $(if $(filter true,$(USE_SAFESTACK)),true,false),'; \ + echo ' "EnableCFI": $(if $(filter false,$(ENABLE_CFI)),false,true),'; \ + echo ' "Device_uses_hwc2": $(if $(filter true,$(TARGET_USES_HWC2)),true,false),'; \ +diff --git a/envsetup.sh b/envsetup.sh +index b71a8256a..aa400e4c7 100644 +--- a/envsetup.sh ++++ b/envsetup.sh +@@ -728,7 +728,9 @@ function getdriver() + # c++-analyzer and ccc-analyzer. + local CLANG_VERSION=$(get_build_var LLVM_PREBUILTS_VERSION) + local BUILD_OS=$(get_build_var BUILD_OS) +- local CLANG_DIR="$T/prebuilts/clang/host/${BUILD_OS}-x86/${CLANG_VERSION}" ++ local BUILD_ARCH="x86" ++ test $(uname -m) = "aarch64" && BUILD_ARCH=arm64 ++ local CLANG_DIR="$T/prebuilts/clang/host/${BUILD_OS}-${BUILD_ARCH}/${CLANG_VERSION}" + echo "\ + ${CLANG_DIR}/tools/scan-build/bin/scan-build \ + --use-analyzer ${CLANG_DIR}/bin/clang \ +diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py +index 652fadf56..17d851b3c 100644 +--- a/tools/releasetools/common.py ++++ b/tools/releasetools/common.py +@@ -38,10 +38,15 @@ from hashlib import sha1 as sha1 + + class Options(object): + def __init__(self): +- platform_search_path = { ++ if platform.processor() == 'aarch64': ++ platform_search_path = { ++ "linux2": "out/host/linux-arm64", ++ } ++ else: ++ platform_search_path = { + "linux2": "out/host/linux-x86", + "darwin": "out/host/darwin-x86", +- } ++ } + + self.search_path = platform_search_path.get(sys.platform, None) + self.signapk_path = "framework/signapk.jar" # Relative to search_path +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ tools/../core/clang/HOST_arm.mk 2017-06-08 16:05:39.563015342 +0000 +@@ -0,0 +1 @@ ++$(clang_2nd_arch_prefix)HOST_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-armv7.a +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ tools/../core/clang/HOST_arm64.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1 @@ ++HOST_LIBPROFILE_RT := $(LLVM_RTLIB_PATH)/libclang_rt.profile-aarch64.a +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ tools/../core/combo/HOST_linux-arm.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1,30 @@ ++# ++# Copyright (C) 2006 The Android Open Source Project ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++# Configuration for builds hosted on linux-arm. ++# Included by combo/select.mk ++ ++define $(combo_var_prefix)transform-shared-lib-to-toc ++$(call _gen_toc_command_for_elf,$(1),$(2)) ++endef ++ ++############################################################ ++## Macros after this line are shared by the 64-bit config. ++ ++# $(1): The file to check ++define get-file-size ++stat --format "%s" "$(1)" | tr -d '\n' ++endef +--- /dev/null 2017-05-30 12:59:06.809484016 +0000 ++++ tools/../core/combo/HOST_linux-arm64.mk 2017-06-08 16:05:39.564015311 +0000 +@@ -0,0 +1,27 @@ ++# ++# Copyright (C) 2006 The Android Open Source Project ++# ++# Licensed under the Apache License, Version 2.0 (the "License"); ++# you may not use this file except in compliance with the License. ++# You may obtain a copy of the License at ++# ++# http://www.apache.org/licenses/LICENSE-2.0 ++# ++# Unless required by applicable law or agreed to in writing, software ++# distributed under the License is distributed on an "AS IS" BASIS, ++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++# See the License for the specific language governing permissions and ++# limitations under the License. ++# ++ ++# Configuration for builds hosted on linux-arm64. ++# Included by combo/select.mk ++ ++define $(combo_var_prefix)transform-shared-lib-to-toc ++$(call _gen_toc_command_for_elf,$(1),$(2)) ++endef ++ ++# $(1): The file to check ++define get-file-size ++stat --format "%s" "$(1)" | tr -d '\n' ++endef diff --git a/llvm-4.0-libc++-libc++abi-dependency.patch b/llvm-4.0-libc++-libc++abi-dependency.patch new file mode 100644 index 0000000..603a730 --- /dev/null +++ b/llvm-4.0-libc++-libc++abi-dependency.patch @@ -0,0 +1,20 @@ +--- llvm/projects/libcxx/lib/CMakeLists.txt.omv~ 2017-06-08 21:41:58.711179229 +0000 ++++ llvm/projects/libcxx/lib/CMakeLists.txt 2017-06-08 21:42:21.121479585 +0000 +@@ -195,7 +195,7 @@ set(LIBCXX_TARGETS) + # Build the shared library. + if (LIBCXX_ENABLE_SHARED) + add_library(cxx_shared SHARED $<TARGET_OBJECTS:cxx_objects>) +- target_link_libraries(cxx_shared ${LIBCXX_LIBRARIES}) ++ target_link_libraries(cxx_shared ${LIBCXX_LIBRARIES} cxxabi_shared) + set_target_properties(cxx_shared + PROPERTIES + LINK_FLAGS "${LIBCXX_LINK_FLAGS}" +@@ -216,7 +216,7 @@ endif() + # Build the static library. + if (LIBCXX_ENABLE_STATIC) + add_library(cxx_static STATIC $<TARGET_OBJECTS:cxx_objects>) +- target_link_libraries(cxx_static ${LIBCXX_LIBRARIES}) ++ target_link_libraries(cxx_static ${LIBCXX_LIBRARIES} cxxabi_static) + set_target_properties(cxx_static + PROPERTIES + LINK_FLAGS "${LIBCXX_LINK_FLAGS}" diff --git a/ndk-diffs.patch b/ndk-diffs.patch new file mode 100644 index 0000000..e5658ef --- /dev/null +++ b/ndk-diffs.patch @@ -0,0 +1,7982 @@ + +project ndk/ +diff --git a/build/lib/build_support.py b/build/lib/build_support.py +index d81efa29..490cb7e7 100644 +--- a/build/lib/build_support.py ++++ b/build/lib/build_support.py +@@ -17,6 +17,7 @@ import argparse + import datetime + import multiprocessing + import os ++import platform + import shutil + import subprocess + import sys +@@ -199,8 +200,11 @@ def get_default_host(): + + + def host_to_tag(host): ++ machine = platform.machine() ++ if machine == 'aarch64': ++ machine = 'arm64' + if host in ['darwin', 'linux']: +- return host + '-x86_64' ++ return host + '-' + machine + elif host == 'windows': + return 'windows' + elif host == 'windows64': +diff --git a/build/tools/dev-defaults.sh b/build/tools/dev-defaults.sh +index 78f3c99d..39282ee1 100644 +--- a/build/tools/dev-defaults.sh ++++ b/build/tools/dev-defaults.sh +@@ -55,14 +55,14 @@ FIRST_GCC64_VERSION=4.9 + DEFAULT_LLVM_GCC32_VERSION=4.9 + DEFAULT_LLVM_GCC64_VERSION=4.9 + +-DEFAULT_BINUTILS_VERSION=2.25 ++DEFAULT_BINUTILS_VERSION=2.26 + DEFAULT_GDB_VERSION=7.11 + DEFAULT_MPFR_VERSION=3.1.1 +-DEFAULT_GMP_VERSION=5.0.5 ++DEFAULT_GMP_VERSION=6.1.0 # was 5.0.5 + DEFAULT_MPC_VERSION=1.0.1 +-DEFAULT_CLOOG_VERSION=0.18.0 +-DEFAULT_ISL_VERSION=0.11.1 +-DEFAULT_PPL_VERSION=1.0 ++DEFAULT_CLOOG_VERSION=0.18.4 ++DEFAULT_ISL_VERSION=0.14 ++DEFAULT_PPL_VERSION=1.2 # was 1.0 + DEFAULT_PYTHON_VERSION=2.7.5 + DEFAULT_PERL_VERSION=5.16.2 + +diff --git a/build/tools/gen-toolchain-wrapper.sh b/build/tools/gen-toolchain-wrapper.sh +index fd9c151d..99a1bfd4 100755 +--- a/build/tools/gen-toolchain-wrapper.sh ++++ b/build/tools/gen-toolchain-wrapper.sh +@@ -165,7 +165,7 @@ gen_wrapper_program () + fi + + cat > "$DST_FILE" << EOF +-#!/bin/sh ++#!/bin/bash + # Auto-generated, do not edit + ${DST_PREFIX}$PROG $FLAGS "\$@" $LDFLAGS + EOF +diff --git a/build/tools/ndk-ccache-g++.sh b/build/tools/ndk-ccache-g++.sh +index 795fd4c9..8ce1584e 100755 +--- a/build/tools/ndk-ccache-g++.sh ++++ b/build/tools/ndk-ccache-g++.sh +@@ -1,2 +1,2 @@ +-#!/bin/sh ++#!/bin/bash + $NDK_CCACHE $NDK_CCACHE_CXX "$@" +diff --git a/build/tools/ndk-ccache-gcc.sh b/build/tools/ndk-ccache-gcc.sh +index a9f88ce2..c8e33e84 100755 +--- a/build/tools/ndk-ccache-gcc.sh ++++ b/build/tools/ndk-ccache-gcc.sh +@@ -1,2 +1,2 @@ +-#!/bin/sh ++#!/bin/bash + $NDK_CCACHE $NDK_CCACHE_CC "$@" +diff --git a/build/tools/prebuilt-common.sh b/build/tools/prebuilt-common.sh +index 106b6615..882281a3 100644 +--- a/build/tools/prebuilt-common.sh ++++ b/build/tools/prebuilt-common.sh +@@ -816,7 +816,7 @@ prepare_canadian_toolchain () + + if [ "$DARWIN" = "yes" ] ; then + cat > "$CROSS_WRAP_DIR/sw_vers" <<EOF +-#!/bin/sh ++#!/bin/bash + # Tiny utility for the real sw_vers some Makefiles need + case \$1 in + -productVersion) +@@ -836,22 +836,38 @@ EOF + fi + $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=$BINPREFIX --dst-prefix="$DST_PREFIX" "$CROSS_WRAP_DIR" \ + --cflags="$HOST_CFLAGS" --cxxflags="$HOST_CFLAGS" --ldflags="$HOST_LDFLAGS" +- # generate wrappers for BUILD toolchain +- # this is required for mingw/darwin build to avoid tools canadian cross configuration issues +- # 32-bit BUILD toolchain +- LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-linux-gnu- \ +- --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-pc-linux-gnu- \ +- --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- # 64-bit BUILD toolchain. libbfd is still built in 32-bit. +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-linux-gnu- \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-pc-linux-gnu- \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- fail_panic "Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR" ++ if [ "`uname -m`" = "aarch64" ]; then ++ LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-arm64/host/aarch64-linux-glibc2.15-4.8" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=arm-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m armelf_linux_eabi" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=arm-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m armelf_linux_eabi" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ # 64-bit BUILD toolchain. libbfd is still built in 32-bit. ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=aarch64-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/aarch64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=aarch64-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/aarch64-linux-" "$CROSS_WRAP_DIR" ++ fail_panic "Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR" ++ else ++ # generate wrappers for BUILD toolchain ++ # this is required for mingw/darwin build to avoid tools canadian cross configuration issues ++ # 32-bit BUILD toolchain ++ LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-pc-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ # 64-bit BUILD toolchain. libbfd is still built in 32-bit. ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-pc-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ fail_panic "Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR" ++ fi + + export PATH=$CROSS_WRAP_DIR:$PATH + dump "Using $DEBIAN_NAME wrapper: $CROSS_WRAP_DIR/${BINPREFIX}gcc" +@@ -918,8 +934,15 @@ prepare_common_build () + if [ -z "$CC" ]; then + LEGACY_TOOLCHAIN_DIR= + if [ "$HOST_OS" = "linux" ]; then +- LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin" +- LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/x86_64-linux-" ++ if [ "$HOST_ARCH" = "aarch64" ]; then ++ # No prebuilt toolchain for aarch64 hosts yet, let's use the system compiler ++ log "Using system compiler for $HOST_ARCH $HOST_OS" ++ CC=gcc ++ CXX=g++ ++ else ++ LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin" ++ LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/x86_64-linux-" ++ fi + elif [ "$HOST_OS" = "darwin" ]; then + LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1/bin" + LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/i686-apple-darwin10-" +@@ -1014,6 +1037,9 @@ prepare_abi_configure_build () + linux-x86_64) + ABI_CONFIGURE_BUILD=x86_64-linux-gnu + ;; ++ linux-aarch64) ++ ABI_CONFIGURE_BUILD=aarch64-linux-gnu ++ ;; + darwin-x86) + ABI_CONFIGURE_BUILD=i686-apple-darwin + ;; +@@ -1038,7 +1064,11 @@ prepare_target_build () + ABI_CONFIGURE_HOST="$ABI_CONFIGURE_BUILD" + + prepare_common_build +- HOST_GMP_ABI=$HOST_BITS ++ if [ "$HOST_ARCH" = "aarch64" ]; then ++ HOST_GMP_ABI=standard ++ else ++ HOST_GMP_ABI=$HOST_BITS ++ fi + + # Now handle the --mingw/--darwin flag + if [ "$MINGW" = "yes" -o "$DARWIN" = "yes" ] ; then +diff --git a/scripts/gen_release_table.py b/scripts/gen_release_table.py +index a600536d..841affef 100755 +--- a/scripts/gen_release_table.py ++++ b/scripts/gen_release_table.py +@@ -77,6 +77,7 @@ def main(): + pretty_host = { + 'darwin-x86_64': 'Mac OS X', + 'linux-x86_64': 'Linux', ++ 'linux-arm64': 'Linux for ARMv8', + 'windows-x86_64': 'Windows 64-bit', + 'windows-x86': 'Windows 32-bit', + }[host] +diff --git a/sources/android/support/tests/run-host.sh b/sources/android/support/tests/run-host.sh +index f9fd9b9d..8ff76141 100755 +--- a/sources/android/support/tests/run-host.sh ++++ b/sources/android/support/tests/run-host.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + set -e + export LANG=C +diff --git a/sources/cxx-stl/gnu-libstdc++/build-gnu-libstdc++.sh b/sources/cxx-stl/gnu-libstdc++/build-gnu-libstdc++.sh +index f97f4a11..aad26149 100755 +--- a/sources/cxx-stl/gnu-libstdc++/build-gnu-libstdc++.sh ++++ b/sources/cxx-stl/gnu-libstdc++/build-gnu-libstdc++.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2011 The Android Open Source Project + # +diff --git a/sources/cxx-stl/llvm-libc++/tools/upgrade-upstream.sh b/sources/cxx-stl/llvm-libc++/tools/upgrade-upstream.sh +index bdff4904..8acd8279 100755 +--- a/sources/cxx-stl/llvm-libc++/tools/upgrade-upstream.sh ++++ b/sources/cxx-stl/llvm-libc++/tools/upgrade-upstream.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # A small script used to update the content of libcxx/ to a newer + # version of libc++. +diff --git a/sources/host-tools/make-3.81/build-make.sh b/sources/host-tools/make-3.81/build-make.sh +index b6200226..76125ab6 100755 +--- a/sources/host-tools/make-3.81/build-make.sh ++++ b/sources/host-tools/make-3.81/build-make.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2011 The Android Open Source Project + # +diff --git a/sources/host-tools/nawk-20071023/build-awk.sh b/sources/host-tools/nawk-20071023/build-awk.sh +index 7f008eef..c5f3c3c6 100755 +--- a/sources/host-tools/nawk-20071023/build-awk.sh ++++ b/sources/host-tools/nawk-20071023/build-awk.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2011 The Android Open Source Project + # +diff --git a/sources/host-tools/ndk-depends/build-ndk-depends.sh b/sources/host-tools/ndk-depends/build-ndk-depends.sh +index 618cb80e..b2365c7a 100755 +--- a/sources/host-tools/ndk-depends/build-ndk-depends.sh ++++ b/sources/host-tools/ndk-depends/build-ndk-depends.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2011 The Android Open Source Project + # +diff --git a/sources/host-tools/ndk-stack/build-ndk-stack.sh b/sources/host-tools/ndk-stack/build-ndk-stack.sh +index d0156148..d076fc2b 100755 +--- a/sources/host-tools/ndk-stack/build-ndk-stack.sh ++++ b/sources/host-tools/ndk-stack/build-ndk-stack.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2011 The Android Open Source Project + # +diff --git a/sources/host-tools/toolbox/build-toolbox.sh b/sources/host-tools/toolbox/build-toolbox.sh +index 2473bbf7..ceaa6259 100755 +--- a/sources/host-tools/toolbox/build-toolbox.sh ++++ b/sources/host-tools/toolbox/build-toolbox.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2011 The Android Open Source Project + # +diff --git a/tests/build/absolute-src-file-paths/build.sh b/tests/build/absolute-src-file-paths/build.sh +index 06853a5d..b2a2c6cc 100755 +--- a/tests/build/absolute-src-file-paths/build.sh ++++ b/tests/build/absolute-src-file-paths/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + # This script is used to check that using absolute paths in + # LOCAL_SRC_PATHS works properly. +diff --git a/tests/build/check-armeabi-v7a-prebuilts/build.sh b/tests/build/check-armeabi-v7a-prebuilts/build.sh +index dfb90bbe..5a951eeb 100755 +--- a/tests/build/check-armeabi-v7a-prebuilts/build.sh ++++ b/tests/build/check-armeabi-v7a-prebuilts/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + # The purpose of this dummy build test is to ensure that all the + # armeabi-v7a prebuilt binaries distributed with the NDK were +diff --git a/tests/build/issue64679-prctl/build.sh b/tests/build/issue64679-prctl/build.sh +index 4ef6f53f..1bf98491 100755 +--- a/tests/build/issue64679-prctl/build.sh ++++ b/tests/build/issue64679-prctl/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # Check if some platform headers can be included alone + # See b.android.com/64679 for one of them + # +diff --git a/tests/build/multi-module-path/build.sh b/tests/build/multi-module-path/build.sh +index 9f4b88ad..ad4c06b6 100755 +--- a/tests/build/multi-module-path/build.sh ++++ b/tests/build/multi-module-path/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + echo "\$0=$0" + cd `dirname $0` +diff --git a/tests/build/prebuilt-copy/build.sh b/tests/build/prebuilt-copy/build.sh +index 01c2c833..2e8d2ae6 100755 +--- a/tests/build/prebuilt-copy/build.sh ++++ b/tests/build/prebuilt-copy/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + # The purpose of this script is the following: + # +diff --git a/tests/build/stdint-c++/jni/gen-sources.sh b/tests/build/stdint-c++/jni/gen-sources.sh +index 8429aaa4..7ef72a08 100755 +--- a/tests/build/stdint-c++/jni/gen-sources.sh ++++ b/tests/build/stdint-c++/jni/gen-sources.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # This script is used to generate the source files for this test. + # +diff --git a/tests/build/thin-archives/build.sh b/tests/build/thin-archives/build.sh +index b1500a30..ceedfd81 100755 +--- a/tests/build/thin-archives/build.sh ++++ b/tests/build/thin-archives/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + $NDK/ndk-build "$@" + if [ $? != 0 ]; then +diff --git a/tests/build/warn-bad-modules/build.sh b/tests/build/warn-bad-modules/build.sh +index 7be3c918..d6db233d 100755 +--- a/tests/build/warn-bad-modules/build.sh ++++ b/tests/build/warn-bad-modules/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + cd `dirname $0` + BUILD_OUTPUT=$($NDK/ndk-build "$@" 2>&1) +diff --git a/tests/build/warn-no-ldflags-in-static-libraries/build.sh b/tests/build/warn-no-ldflags-in-static-libraries/build.sh +index 6292bf6f..ad318490 100755 +--- a/tests/build/warn-no-ldflags-in-static-libraries/build.sh ++++ b/tests/build/warn-no-ldflags-in-static-libraries/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + cd `dirname $0` + BUILD_OUTPUT=$($NDK/ndk-build "$@" 2>&1) +diff --git a/tests/build/warn-no-ldlibs-in-static-libraries/build.sh b/tests/build/warn-no-ldlibs-in-static-libraries/build.sh +index 5a4ecf39..ddeddd04 100755 +--- a/tests/build/warn-no-ldlibs-in-static-libraries/build.sh ++++ b/tests/build/warn-no-ldlibs-in-static-libraries/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + cd `dirname $0` + BUILD_OUTPUT=$($NDK/ndk-build "$@" 2>&1) +diff --git a/tests/build/warn-no-modules/build.sh b/tests/build/warn-no-modules/build.sh +index 47017408..753b7532 100755 +--- a/tests/build/warn-no-modules/build.sh ++++ b/tests/build/warn-no-modules/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + cd `dirname $0` + BUILD_OUTPUT=$($NDK/ndk-build "$@" 2>&1) +diff --git a/tests/build/warn-non-system-libs-in-linker-flags/build.sh b/tests/build/warn-non-system-libs-in-linker-flags/build.sh +index bac26c96..70b14a65 100755 +--- a/tests/build/warn-non-system-libs-in-linker-flags/build.sh ++++ b/tests/build/warn-non-system-libs-in-linker-flags/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + cd `dirname $0` + BUILD_OUTPUT=$($NDK/ndk-build "$@" 2>&1) +diff --git a/tests/build/warn-thin-archive-is-for-static-libraries/build.sh b/tests/build/warn-thin-archive-is-for-static-libraries/build.sh +index 5a1c5b1d..20dafb96 100755 +--- a/tests/build/warn-thin-archive-is-for-static-libraries/build.sh ++++ b/tests/build/warn-thin-archive-is-for-static-libraries/build.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + + cd `dirname $0` + BUILD_OUTPUT=$($NDK/ndk-build "$@" 2>&1) +diff --git a/tests/standalone/run.sh b/tests/standalone/run.sh +index dcced7b6..0eaf61d6 100755 +--- a/tests/standalone/run.sh ++++ b/tests/standalone/run.sh +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/bin/bash + # + # Copyright (C) 2012 The Android Open Source Project + # + +project toolchain/build/ +diff --git a/Makefile.in b/Makefile.in +index 21f33d7..dab823e 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -409,7 +409,7 @@ config-target-gcc: stmp-config-target-gcc + + GCC_CONFIG_ARGS=--prefix=$(prefix) \ + --target=${cur_target} --host=${cur_host} --build=${cur_build} \ +- --with-gnu-as --with-gnu-ld --enable-languages=c,c++ ++ --with-gnu-as --with-gnu-ld --enable-languages=c,c++,fortran,objc,obj-c++ + + # For gcc versions 4.3.0 and later, gmp and mpfr are required. + # Also build libgcc is a seperate sub-target in 4.3.0+. +diff --git a/configure b/configure +index 738b57a..1558809 100755 +--- a/configure ++++ b/configure +@@ -1312,7 +1312,7 @@ Optional Packages: + --with-mpc-version=VERSION + use mpc-VERSION (default is 0.8.1) + --with-ppl-version=VERSION +- use ppl-VERSION (default is 0.11.2) ++ use ppl-VERSION (default is 1.2) + --with-cloog-version=VERSION + use cloog-VERSION (default is 0.15.9) + --with-isl-version=VERSION +@@ -2633,7 +2633,7 @@ fi + + + if test "$ENABLE_GRAPHITE" == "yes"; then +-# ppl version (default is 0.11.2) ++# ppl version (default is 1.2) + # ppl is only used for gcc 4.5 and 4.6 with graphite optimization. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking ppl version" >&5 + $as_echo_n "checking ppl version... " >&6; } +@@ -2644,7 +2644,7 @@ if test "${with_ppl_version+set}" = set; then : + PPL_VERSION="$withval" + fi + else +- PPL_VERSION="0.11.2" ++ PPL_VERSION="1.2" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PPL_VERSION" >&5 +@@ -2659,6 +2659,8 @@ if test \( ! -d $srcdir/../$tool/ppl-${PPL_VERSION} \) -a \( x"$version" != x"no + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/ppl-${PPL_VERSION}.tgz + elif test -f $srcdir/../$tool/ppl-${PPL_VERSION}.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/ppl-${PPL_VERSION}.tar.bz2 ++ elif test -f $srcdir/../$tool/ppl-${PPL_VERSION}.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../$tool/ppl-${PPL_VERSION}.tar.xz + elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar ; then + mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/ppl-${PPL_VERSION}.tar + elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.gz ; then +@@ -2667,6 +2669,8 @@ if test \( ! -d $srcdir/../$tool/ppl-${PPL_VERSION} \) -a \( x"$version" != x"no + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/ppl-${PPL_VERSION}.tgz + elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.bz2 ++ elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.xz + else + as_fn_error "'package ppl-${PPL_VERSION} does not exist.'" "$LINENO" 5 + fi +diff --git a/configure.ac b/configure.ac +index b316a7e..6b2acff 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -268,6 +268,8 @@ if test \( ! -d $srcdir/../$tool/$1 \) -a \( x"$version" != x"none" \) ; then + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tgz + elif test -f $srcdir/../$tool/$1.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/$1.tar.bz2 ++ elif test -f $srcdir/../$tool/$1.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../$tool/$1.tar.xz + elif test -f $srcdir/../tarballs/$1.tar ; then + mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/$1.tar + elif test -f $srcdir/../tarballs/$1.tar.gz ; then +@@ -276,6 +278,8 @@ if test \( ! -d $srcdir/../$tool/$1 \) -a \( x"$version" != x"none" \) ; then + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tgz + elif test -f $srcdir/../tarballs/$1.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/$1.tar.bz2 ++ elif test -f $srcdir/../tarballs/$1.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../tarballs/$1.tar.xz + else + AC_MSG_ERROR('package $1 does not exist.') + fi +@@ -452,16 +456,16 @@ fi + AC_SUBST(MPC_VERSION) + + if test "$ENABLE_GRAPHITE" == "yes"; then +-# ppl version (default is 0.11.2) ++# ppl version (default is 1.2) + # ppl is only used for gcc 4.5 and 4.6 with graphite optimization. + AC_MSG_CHECKING([ppl version]) + AC_ARG_WITH([ppl-version], + [ --with-ppl-version=VERSION +- use ppl-VERSION (default is 0.11.2)], ++ use ppl-VERSION (default is 1.2)], + [if test x"$withval" != x ; then + PPL_VERSION="$withval" + fi], +-[PPL_VERSION="0.11.2"]) ++[PPL_VERSION="1.2"]) + AC_MSG_RESULT($PPL_VERSION) + ANDROID_CHECK_PACKAGE(ppl-${PPL_VERSION}) + fi + +project toolchain/gcc/ +diff --git a/build-gcc.sh b/build-gcc.sh +index 4893461cf..4a821d7df 100755 +--- a/build-gcc.sh ++++ b/build-gcc.sh +@@ -70,7 +70,7 @@ register_var_option "--ppl-version=<version>" PPL_VERSION "Specify ppl version" + PACKAGE_DIR= + register_var_option "--package-dir=<path>" PACKAGE_DIR "Create archive tarball in specific directory" + +-ENABLE_LANGUAGES="c,c++" ++ENABLE_LANGUAGES="c,c++,fortran,objc,obj-c++" + register_var_option "--enable-languages=<name>" ENABLE_LANGUAGES "Experimental: specify which languages to build" + + BUILD_DEBUGGABLE="no" +diff --git a/gcc-4.9/gcc/graphite-clast-to-gimple.c b/gcc-4.9/gcc/graphite-clast-to-gimple.c +index 134388c14..431798985 100644 +--- a/gcc-4.9/gcc/graphite-clast-to-gimple.c ++++ b/gcc-4.9/gcc/graphite-clast-to-gimple.c +@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see + #include <isl/constraint.h> + #include <isl/ilp.h> + #include <isl/aff.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/ilp_int.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE +diff --git a/gcc-4.9/gcc/graphite-dependences.c b/gcc-4.9/gcc/graphite-dependences.c +index b0f868077..32000e0bc 100644 +--- a/gcc-4.9/gcc/graphite-dependences.c ++++ b/gcc-4.9/gcc/graphite-dependences.c +@@ -183,7 +183,7 @@ scop_get_transformed_schedule (scop_p scop, vec<poly_bb_p> pbbs) + /* Helper function used on each MAP of a isl_union_map. Computes the + maximal output dimension. */ + +-static int ++static isl_stat + max_number_of_out_dimensions (__isl_take isl_map *map, void *user) + { + int global_max = *((int *) user); +@@ -195,7 +195,7 @@ max_number_of_out_dimensions (__isl_take isl_map *map, void *user) + + isl_map_free (map); + isl_space_free (space); +- return 0; ++ return isl_stat_ok; + } + + /* Extends the output dimension of MAP to MAX dimensions. */ +@@ -219,12 +219,12 @@ struct extend_schedule_str { + + /* Helper function for extend_schedule. */ + +-static int ++static isl_stat + extend_schedule_1 (__isl_take isl_map *map, void *user) + { + struct extend_schedule_str *str = (struct extend_schedule_str *) user; + str->umap = isl_union_map_add_map (str->umap, extend_map (map, str->max)); +- return 0; ++ return isl_stat_ok; + } + + /* Return a relation that has uniform output dimensions. */ +diff --git a/gcc-4.9/gcc/graphite-interchange.c b/gcc-4.9/gcc/graphite-interchange.c +index 2e625c127..1984a2c14 100644 +--- a/gcc-4.9/gcc/graphite-interchange.c ++++ b/gcc-4.9/gcc/graphite-interchange.c +@@ -29,6 +29,9 @@ along with GCC; see the file COPYING3. If not see + #include <isl/map.h> + #include <isl/union_map.h> + #include <isl/ilp.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/ilp_int.h> ++#include <isl/deprecated/constraint_int.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE +diff --git a/gcc-4.9/gcc/graphite-optimize-isl.c b/gcc-4.9/gcc/graphite-optimize-isl.c +index fc12eebbf..f0b750603 100644 +--- a/gcc-4.9/gcc/graphite-optimize-isl.c ++++ b/gcc-4.9/gcc/graphite-optimize-isl.c +@@ -28,6 +28,9 @@ along with GCC; see the file COPYING3. If not see + #include <isl/band.h> + #include <isl/aff.h> + #include <isl/options.h> ++#include <isl/union_set.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/aff_int.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE + #include <isl/deprecated/int.h> + #include <isl/deprecated/aff_int.h> +@@ -415,13 +418,13 @@ getScheduleMap (isl_schedule *Schedule) + return ScheduleMap; + } + +-static int ++static isl_stat + getSingleMap (__isl_take isl_map *map, void *user) + { + isl_map **singleMap = (isl_map **) user; + *singleMap = map; + +- return 0; ++ return isl_stat_ok; + } + + static void +@@ -469,7 +472,7 @@ optimize_isl (scop_p scop) + + isl_options_set_schedule_max_constant_term (scop->ctx, CONSTANT_BOUND); + isl_options_set_schedule_maximize_band_depth (scop->ctx, 1); +- isl_options_set_schedule_fuse (scop->ctx, ISL_SCHEDULE_FUSE_MIN); ++ isl_options_set_schedule_serialize_sccs (scop->ctx, 1); + isl_options_set_on_error (scop->ctx, ISL_ON_ERROR_CONTINUE); + schedule = isl_union_set_compute_schedule (domain, validity, proximity); + isl_options_set_on_error (scop->ctx, ISL_ON_ERROR_ABORT); +diff --git a/gcc-4.9/gcc/graphite-poly.c b/gcc-4.9/gcc/graphite-poly.c +index fccc2ec6d..6b99071c1 100644 +--- a/gcc-4.9/gcc/graphite-poly.c ++++ b/gcc-4.9/gcc/graphite-poly.c +@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see + #include <isl/constraint.h> + #include <isl/ilp.h> + #include <isl/aff.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/ilp_int.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE +diff --git a/gcc-4.9/gcc/graphite-poly.h b/gcc-4.9/gcc/graphite-poly.h +index 06d320eea..28a2498e4 100644 +--- a/gcc-4.9/gcc/graphite-poly.h ++++ b/gcc-4.9/gcc/graphite-poly.h +@@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see + #ifndef GCC_GRAPHITE_POLY_H + #define GCC_GRAPHITE_POLY_H + ++#include <isl/constraint.h> ++ + typedef struct poly_dr *poly_dr_p; + + typedef struct poly_bb *poly_bb_p; +diff --git a/gcc-4.9/gcc/graphite-sese-to-poly.c b/gcc-4.9/gcc/graphite-sese-to-poly.c +index 059c10dbb..65d4e5690 100644 +--- a/gcc-4.9/gcc/graphite-sese-to-poly.c ++++ b/gcc-4.9/gcc/graphite-sese-to-poly.c +@@ -26,6 +26,9 @@ along with GCC; see the file COPYING3. If not see + #include <isl/union_map.h> + #include <isl/constraint.h> + #include <isl/aff.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/aff_int.h> ++#include <isl/deprecated/constraint_int.h> + #include <cloog/cloog.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> +diff --git a/gcc-4.9/libgfortran/intrinsics/cshift0.c b/gcc-4.9/libgfortran/intrinsics/cshift0.c +index f983754f1..5187ed9f0 100644 +--- a/gcc-4.9/libgfortran/intrinsics/cshift0.c ++++ b/gcc-4.9/libgfortran/intrinsics/cshift0.c +@@ -146,7 +146,7 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + cshift0_r16 ((gfc_array_r16 *)ret, (gfc_array_r16 *) array, shift, + which); +@@ -176,7 +176,7 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 // defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + cshift0_c16 ((gfc_array_c16 *)ret, (gfc_array_c16 *) array, shift, + which); +diff --git a/gcc-4.9/libgfortran/intrinsics/pack_generic.c b/gcc-4.9/libgfortran/intrinsics/pack_generic.c +index 3fbfa0aaa..ebaba1ccd 100644 +--- a/gcc-4.9/libgfortran/intrinsics/pack_generic.c ++++ b/gcc-4.9/libgfortran/intrinsics/pack_generic.c +@@ -158,7 +158,7 @@ pack_internal (gfc_array_char *ret, const gfc_array_char *array, + if (total == 0) + return; /* In this case, nothing remains to be done. */ + } +- else ++ else + { + /* We come here because of range checking. */ + index_type ret_extent; +@@ -312,7 +312,7 @@ pack (gfc_array_char *ret, const gfc_array_char *array, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + pack_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) array, + (gfc_array_l1 *) mask, (gfc_array_r16 *) vector); +@@ -344,7 +344,7 @@ pack (gfc_array_char *ret, const gfc_array_char *array, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + pack_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) array, + (gfc_array_l1 *) mask, (gfc_array_c16 *) vector); +diff --git a/gcc-4.9/libgfortran/intrinsics/spread_generic.c b/gcc-4.9/libgfortran/intrinsics/spread_generic.c +index f3f23b8ce..07d316c80 100644 +--- a/gcc-4.9/libgfortran/intrinsics/spread_generic.c ++++ b/gcc-4.9/libgfortran/intrinsics/spread_generic.c +@@ -142,7 +142,7 @@ spread_internal (gfc_array_char *ret, const gfc_array_char *source, + " should be %ld", (long int) n+1, + (long int) ret_extent, + (long int) extent[dim]); +- ++ + if (extent[dim] <= 0) + zero_sized = 1; + sstride[dim] = GFC_DESCRIPTOR_STRIDE_BYTES(source,dim); +@@ -529,7 +529,7 @@ spread_scalar (gfc_array_char *ret, const char *source, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + spread_scalar_r16 ((gfc_array_r16 *) ret, (GFC_REAL_16 *) source, + *along, *pncopies); +@@ -561,7 +561,7 @@ spread_scalar (gfc_array_char *ret, const char *source, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + spread_scalar_c16 ((gfc_array_c16 *) ret, (GFC_COMPLEX_16 *) source, + *along, *pncopies); +diff --git a/gcc-4.9/libgfortran/intrinsics/unpack_generic.c b/gcc-4.9/libgfortran/intrinsics/unpack_generic.c +index 4bd99278e..330c9e2a5 100644 +--- a/gcc-4.9/libgfortran/intrinsics/unpack_generic.c ++++ b/gcc-4.9/libgfortran/intrinsics/unpack_generic.c +@@ -278,7 +278,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + unpack1_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) vector, + mask, (gfc_array_r16 *) field); +@@ -310,7 +310,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + unpack1_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) vector, + mask, (gfc_array_c16 *) field); +@@ -489,7 +489,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + unpack0_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) vector, + mask, (GFC_REAL_16 *) field); +@@ -521,7 +521,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + unpack0_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) vector, + mask, (GFC_COMPLEX_16 *) field); +diff --git a/gcc-4.9/libgfortran/runtime/in_pack_generic.c b/gcc-4.9/libgfortran/runtime/in_pack_generic.c +index aab155df6..a2ba81e96 100644 +--- a/gcc-4.9/libgfortran/runtime/in_pack_generic.c ++++ b/gcc-4.9/libgfortran/runtime/in_pack_generic.c +@@ -67,7 +67,7 @@ internal_pack (gfc_array_char * source) + case GFC_DTYPE_INTEGER_4: + case GFC_DTYPE_LOGICAL_4: + return internal_pack_4 ((gfc_array_i4 *) source); +- ++ + case GFC_DTYPE_INTEGER_8: + case GFC_DTYPE_LOGICAL_8: + return internal_pack_8 ((gfc_array_i8 *) source); +@@ -95,7 +95,7 @@ internal_pack (gfc_array_char * source) + return internal_pack_r10 ((gfc_array_r10 *) source); + # endif + +-# if defined (HAVE_GFC_REAL_16) ++# if 0 && defined (HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + return internal_pack_r16 ((gfc_array_r16 *) source); + # endif +@@ -103,7 +103,7 @@ internal_pack (gfc_array_char * source) + + case GFC_DTYPE_COMPLEX_4: + return internal_pack_c4 ((gfc_array_c4 *) source); +- ++ + case GFC_DTYPE_COMPLEX_8: + return internal_pack_c8 ((gfc_array_c8 *) source); + +@@ -119,7 +119,7 @@ internal_pack (gfc_array_char * source) + return internal_pack_c10 ((gfc_array_c10 *) source); + # endif + +-# if defined (HAVE_GFC_COMPLEX_16) ++# if 0 && defined (HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + return internal_pack_c16 ((gfc_array_c16 *) source); + # endif +diff --git a/gcc-4.9/libgfortran/runtime/in_unpack_generic.c b/gcc-4.9/libgfortran/runtime/in_unpack_generic.c +index 18855e1b6..ff65a187a 100644 +--- a/gcc-4.9/libgfortran/runtime/in_unpack_generic.c ++++ b/gcc-4.9/libgfortran/runtime/in_unpack_generic.c +@@ -103,7 +103,7 @@ internal_unpack (gfc_array_char * d, const void * s) + return; + # endif + +-# if defined(HAVE_GFC_REAL_16) ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + internal_unpack_r16 ((gfc_array_r16 *) d, (const GFC_REAL_16 *) s); + return; +@@ -131,7 +131,7 @@ internal_unpack (gfc_array_char * d, const void * s) + return; + # endif + +-# if defined(HAVE_GFC_COMPLEX_16) ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + internal_unpack_c16 ((gfc_array_c16 *) d, (const GFC_COMPLEX_16 *) s); + return; + +project toolchain/sed/ +diff --git a/Makefile.in b/Makefile.in +index 3158710..236b714 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -1,7 +1,7 @@ +-# Makefile.in generated by automake 1.12.2 from Makefile.am. ++# Makefile.in generated by automake 1.15 from Makefile.am. + # @configure_input@ + +-# Copyright (C) 1994-2012 Free Software Foundation, Inc. ++# Copyright (C) 1994-2014 Free Software Foundation, Inc. + + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, +@@ -16,23 +16,61 @@ + + + VPATH = @srcdir@ +-am__make_dryrun = \ +- { \ +- am__dry=no; \ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++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 \ + *\\[\ \ ]*) \ +- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ +- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ +- *) \ +- for am__flg in $$MAKEFLAGS; do \ +- case $$am__flg in \ +- *=*|--*) ;; \ +- *n*) am__dry=yes; break;; \ +- esac; \ +- done;; \ ++ 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; \ +- test $$am__dry = yes; \ +- } ++ 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@ +@@ -51,18 +89,6 @@ POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ + subdir = . +-DIST_COMMON = README $(am__configure_deps) $(noinst_HEADERS) \ +- $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ +- $(srcdir)/config_h.in $(top_srcdir)/build-aux/config.guess \ +- $(top_srcdir)/build-aux/config.rpath \ +- $(top_srcdir)/build-aux/config.sub \ +- $(top_srcdir)/build-aux/install-sh \ +- $(top_srcdir)/build-aux/missing $(top_srcdir)/configure \ +- ABOUT-NLS AUTHORS COPYING COPYING.DOC ChangeLog INSTALL NEWS \ +- README-alpha THANKS build-aux/compile build-aux/config.guess \ +- build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ +- build-aux/install-sh build-aux/mdate-sh build-aux/missing \ +- build-aux/texinfo.tex + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ +@@ -122,21 +148,36 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ ++ $(am__configure_deps) $(noinst_HEADERS) $(am__DIST_COMMON) + 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 = + 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 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 uninstall-recursive ++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;; \ +@@ -146,13 +187,46 @@ DATA = $(noinst_DATA) + HEADERS = $(noinst_HEADERS) + RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ +- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ ++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 + DIST_SUBDIRS = $(SUBDIRS) ++am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config_h.in \ ++ $(top_srcdir)/build-aux/compile \ ++ $(top_srcdir)/build-aux/config.guess \ ++ $(top_srcdir)/build-aux/config.rpath \ ++ $(top_srcdir)/build-aux/config.sub \ ++ $(top_srcdir)/build-aux/install-sh \ ++ $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \ ++ COPYING.DOC ChangeLog INSTALL NEWS README README-alpha THANKS \ ++ build-aux/compile build-aux/config.guess \ ++ build-aux/config.rpath build-aux/config.sub build-aux/depcomp \ ++ build-aux/install-sh build-aux/mdate-sh build-aux/missing \ ++ build-aux/texinfo.tex + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + distdir = $(PACKAGE)-$(VERSION) + top_distdir = $(distdir) +@@ -200,6 +274,7 @@ ACLOCAL = @ACLOCAL@ + ALLOCA = @ALLOCA@ + ALLOCA_H = @ALLOCA_H@ + AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ + APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ + AR = @AR@ + ARFLAGS = @ARFLAGS@ +@@ -1005,7 +1080,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits Makefile +-.PRECIOUS: Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ +@@ -1026,8 +1100,8 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__aclocal_m4_deps): + + config.h: stamp-h1 +- @if test ! -f $@; then rm -f stamp-h1; else :; fi +- @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi ++ @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 +@@ -1046,14 +1120,13 @@ distclean-hdr: + # (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. +-$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ +- for f in x $$MAKEFLAGS; do \ +- case $$f in \ +- *=* | --[!k]*);; \ +- *k*) failcom='fail=yes';; \ +- esac; \ +- done; \ ++$(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 \ +@@ -1074,31 +1147,13 @@ $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" +-tags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ +- done +-ctags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ +- done +-cscopelist-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ +- done + +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: tags-recursive $(HEADERS) $(SOURCES) config_h.in $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) ++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 \ +@@ -1114,12 +1169,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config_h.in $(TAGS_DEPENDENCIES) \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ +- list='$(SOURCES) $(HEADERS) config_h.in $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ +@@ -1131,15 +1181,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config_h.in $(TAGS_DEPENDENCIES) \ + $$unique; \ + fi; \ + fi +-ctags: CTAGS +-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config_h.in $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) config_h.in $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++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 +@@ -1148,18 +1194,16 @@ 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 + +-cscope.files: clean-cscope cscopelist-recursive cscopelist +- +-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP)'; \ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ +@@ -1265,10 +1309,16 @@ dist-xz: distdir + $(am__post_remove_distdir) + + dist-tarZ: 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 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + + dist-shar: distdir ++ @echo WARNING: "Support for shar distribution archives 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) + +@@ -1301,18 +1351,19 @@ distcheck: dist + *.zip*) \ + unzip $(distdir).zip ;;\ + esac +- chmod -R a-w $(distdir); chmod u+w $(distdir) +- mkdir $(distdir)/_build +- mkdir $(distdir)/_inst ++ chmod -R a-w $(distdir) ++ chmod u+w $(distdir) ++ mkdir $(distdir)/_build $(distdir)/_build/sub $(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 --srcdir=.. --prefix="$$dc_install_base" \ ++ && $(am__cd) $(distdir)/_build/sub \ ++ && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ ++ --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ +@@ -1467,25 +1518,25 @@ ps-am: + + uninstall-am: + +-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ +- cscopelist-recursive ctags-recursive install-am install-strip \ +- tags-recursive +- +-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ +- all all-am am--refresh check check-am clean clean-cscope \ +- clean-generic cscope cscopelist cscopelist-recursive ctags \ +- ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-hook \ +- dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ +- distclean distclean-generic distclean-hdr 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-ps install-ps-am install-strip installcheck \ +- installcheck-am installdirs installdirs-am maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ +- pdf-am ps ps-am tags tags-recursive uninstall uninstall-am ++.MAKE: $(am__recursive_targets) all install-am install-strip ++ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ ++ am--refresh check check-am clean clean-cscope clean-generic \ ++ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ ++ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ ++ dist-zip distcheck distclean distclean-generic distclean-hdr \ ++ 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-ps install-ps-am install-strip \ ++ installcheck installcheck-am installdirs installdirs-am \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ ++ uninstall-am ++ ++.PRECIOUS: Makefile + + + html: +diff --git a/aclocal.m4 b/aclocal.m4 +index 1b04dbe..5261ab3 100644 +--- a/aclocal.m4 ++++ b/aclocal.m4 +@@ -1,6 +1,6 @@ +-# generated automatically by aclocal 1.12.2 -*- Autoconf -*- ++# generated automatically by aclocal 1.15 -*- Autoconf -*- + +-# Copyright (C) 1996-2012 Free Software Foundation, Inc. ++# Copyright (C) 1996-2014 Free Software Foundation, Inc. + + # This file is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, +@@ -11,6 +11,7 @@ + # 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],, +@@ -19,24 +20,22 @@ 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-2012 Free Software Foundation, Inc. ++# Copyright (C) 2002-2014 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. + +-# serial 8 +- + # 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.12' ++[am__api_version='1.15' + 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.12.2], [], ++m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl + ]) + +@@ -52,21 +51,19 @@ m4_define([_AM_AUTOCONF_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.12.2])dnl ++[AM_AUTOMAKE_VERSION([1.15])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-2012 Free Software Foundation, Inc. ++# Copyright (C) 2001-2014 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. + +-# serial 2 +- + # 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/../..'. +@@ -106,22 +103,19 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + # 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` ++[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl ++# Expand $ac_aux_dir to an absolute path. ++am_aux_dir=`cd "$ac_aux_dir" && pwd` + ]) + + # AM_CONDITIONAL -*- Autoconf -*- + +-# Copyright (C) 1997-2012 Free Software Foundation, Inc. ++# Copyright (C) 1997-2014 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. + +-# serial 10 +- + # AM_CONDITIONAL(NAME, SHELL-CONDITION) + # ------------------------------------- + # Define a conditional. +@@ -147,13 +141,12 @@ AC_CONFIG_COMMANDS_PRE( + Usually this means the macro was only invoked conditionally.]]) + fi])]) + +-# Copyright (C) 1999-2012 Free Software Foundation, Inc. ++# Copyright (C) 1999-2014 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. + +-# serial 17 + + # 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, +@@ -339,19 +332,18 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl + + # Generate code to set up dependency tracking. -*- Autoconf -*- + +-# Copyright (C) 1999-2012 Free Software Foundation, Inc. ++# Copyright (C) 1999-2014 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. + +-# serial 6 + + # _AM_OUTPUT_DEPENDENCY_COMMANDS + # ------------------------------ + AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], + [{ +- # Autoconf 2.62 quotes --file arguments for eval, but not when files ++ # 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 +@@ -380,7 +372,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], + 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 ++ 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 +@@ -414,30 +406,23 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) + ]) + +-# Copyright (C) 1996-2012 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. +- +-# serial 8 +- +-# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +-AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) +- + # Do all the work for Automake. -*- Autoconf -*- + +-# Copyright (C) 1996-2012 Free Software Foundation, Inc. ++# Copyright (C) 1996-2014 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. + +-# serial 19 +- + # 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]) + # ----------------------------------------------- +@@ -450,7 +435,7 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + # 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.62])dnl ++[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 +@@ -480,8 +465,7 @@ AC_SUBST([CYGPATH_W]) + dnl Distinguish between old-style and new-style calls. + m4_ifval([$2], + [AC_DIAGNOSE([obsolete], +-[$0: two- and three-arguments forms are deprecated. For more info, see: +-http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) ++ [$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])], +@@ -514,8 +498,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl + # <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. ++# We need awk for the "check" target (and possibly the TAP driver). 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 +@@ -535,21 +519,63 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +-dnl Support for Objective C++ was only introduced in Autoconf 2.65, +-dnl but we still cater to Autoconf 2.62. +-m4_ifdef([AC_PROG_OBJCXX], +-[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], ++AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], +- m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl ++ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl + ]) +-_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +-dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the +-dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +-dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. ++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 The trailing newline in this macro's definition is deliberate, for ++dnl backward compatibility and to allow trailing 'dnl'-style comments ++dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. + ]) + + dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +@@ -558,7 +584,6 @@ 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. +@@ -580,20 +605,18 @@ for _am_header in $config_headers :; do + done + echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +-# Copyright (C) 2001-2012 Free Software Foundation, Inc. ++# Copyright (C) 2001-2014 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. + +-# serial 8 +- + # 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 ++if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; +@@ -603,14 +626,12 @@ if test x"${install_sh}" != xset; then + fi + AC_SUBST([install_sh])]) + +-# Copyright (C) 2003-2012 Free Software Foundation, Inc. ++# Copyright (C) 2003-2014 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. + +-# serial 2 +- + # Check whether the underlying file-system supports filenames + # with a leading dot. For instance MS-DOS doesn't. + AC_DEFUN([AM_SET_LEADING_DOT], +@@ -626,14 +647,12 @@ AC_SUBST([am__leading_dot])]) + + # Check to see how 'make' treats includes. -*- Autoconf -*- + +-# Copyright (C) 2001-2012 Free Software Foundation, Inc. ++# Copyright (C) 2001-2014 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. + +-# serial 5 +- + # AM_MAKE_INCLUDE() + # ----------------- + # Check to see how make treats includes. +@@ -678,14 +697,12 @@ rm -f confinc confmf + + # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +-# Copyright (C) 1997-2012 Free Software Foundation, Inc. ++# Copyright (C) 1997-2014 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. + +-# serial 7 +- + # AM_MISSING_PROG(NAME, PROGRAM) + # ------------------------------ + AC_DEFUN([AM_MISSING_PROG], +@@ -693,11 +710,10 @@ AC_DEFUN([AM_MISSING_PROG], + $1=${$1-"${am_missing_run}$2"} + AC_SUBST($1)]) + +- + # AM_MISSING_HAS_RUN + # ------------------ +-# Define MISSING if not defined so far and test if it supports --run. +-# If it does, set am_missing_run to use it, otherwise, to nothing. ++# 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 +@@ -710,29 +726,28 @@ if test x"${MISSING+set}" != xset; then + esac + fi + # Use eval to expand $SHELL +-if eval "$MISSING --run true"; then +- am_missing_run="$MISSING --run " ++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 + ]) + +-# Copyright (C) 2003-2012 Free Software Foundation, Inc. ++# Copyright (C) 2003-2014 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. + +-# serial 3 +- + # AM_PROG_MKDIR_P + # --------------- + # Check for 'mkdir -p'. + AC_DEFUN([AM_PROG_MKDIR_P], + [AC_PREREQ([2.60])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl +-dnl FIXME to be removed in Automake 1.13. ++dnl FIXME we are no longer going to remove this! adjust warning ++dnl FIXME message accordingly. + AC_DIAGNOSE([obsolete], + [$0: this macro is deprecated, and will soon be removed. + You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead, +@@ -751,16 +766,43 @@ case $mkdir_p in + esac + ]) + ++# -*- Autoconf -*- ++# Obsolete and "removed" macros, that must however still report explicit ++# error messages when used, to smooth transition. ++# ++# Copyright (C) 1996-2014 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. ++ ++AC_DEFUN([AM_CONFIG_HEADER], ++[AC_DIAGNOSE([obsolete], ++['$0': this macro is obsolete. ++You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl ++AC_CONFIG_HEADERS($@)]) ++ ++AC_DEFUN([AM_PROG_CC_STDC], ++[AC_PROG_CC ++am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc ++AC_DIAGNOSE([obsolete], ++['$0': this macro is obsolete. ++You should simply use the 'AC][_PROG_CC' macro instead. ++Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', ++but upon 'ac_cv_prog_cc_stdc'.])]) ++ ++AC_DEFUN([AM_C_PROTOTYPES], ++ [AC_FATAL([automatic de-ANSI-fication support has been removed])]) ++AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) ++ + # Helper functions for option handling. -*- Autoconf -*- + +-# Copyright (C) 2001-2012 Free Software Foundation, Inc. ++# Copyright (C) 2001-2014 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. + +-# serial 6 +- + # _AM_MANGLE_OPTION(NAME) + # ----------------------- + AC_DEFUN([_AM_MANGLE_OPTION], +@@ -784,15 +826,77 @@ AC_DEFUN([_AM_SET_OPTIONS], + AC_DEFUN([_AM_IF_OPTION], + [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +-# Check to make sure that the build environment is sane. -*- Autoconf -*- ++# Copyright (C) 1999-2014 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. + +-# Copyright (C) 1996-2012 Free Software Foundation, Inc. ++# _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-2014 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. + +-# serial 9 ++# 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-2014 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 + # --------------- +@@ -869,13 +973,71 @@ AC_CONFIG_COMMANDS_PRE( + rm -f conftest.file + ]) + +-# Copyright (C) 2001-2012 Free Software Foundation, Inc. ++# Copyright (C) 2009-2014 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. + +-# serial 2 ++# 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-2014 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 + # --------------------- +@@ -899,14 +1061,12 @@ fi + INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +-# Copyright (C) 2006-2012 Free Software Foundation, Inc. ++# Copyright (C) 2006-2014 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. + +-# serial 3 +- + # _AM_SUBST_NOTMAKE(VARIABLE) + # --------------------------- + # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +@@ -920,14 +1080,12 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + + # Check how to create a tarball. -*- Autoconf -*- + +-# Copyright (C) 2004-2012 Free Software Foundation, Inc. ++# Copyright (C) 2004-2014 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. + +-# serial 3 +- + # _AM_PROG_TAR(FORMAT) + # -------------------- + # Check how to create a tarball in format FORMAT. +@@ -941,76 +1099,114 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # 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}']) +-m4_if([$1], [v7], +- [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], +- [m4_case([$1], [ustar],, [pax],, +- [m4_fatal([Unknown tar format])]) +-AC_MSG_CHECKING([how to create a $1 tar archive]) +-# Loop over all known methods to create a tar archive until one works. ++ ++# 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' +-_am_tools=${am_cv_prog_tar_$1-$_am_tools} +-# Do not fold the above two line into one, because Tru64 sh and +-# Solaris sh will not grok spaces in the rhs of '-'. +-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 ++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 + +- # 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]) ++ # 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 +- if test -s conftest.tar; then +- AM_RUN_LOG([$am__untar <conftest.tar]) +- 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_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 +diff --git a/configure b/configure +index 6991ab4..47bfbcc 100755 +--- a/configure ++++ b/configure +@@ -1362,6 +1362,10 @@ CFLAGS + CC + COPYRIGHT_YEAR + SED_FEATURE_VERSION ++AM_BACKSLASH ++AM_DEFAULT_VERBOSITY ++AM_DEFAULT_V ++AM_V + am__untar + am__tar + AMTAR +@@ -1426,6 +1430,7 @@ SHELL' + ac_subst_files='' + ac_user_opts=' + enable_option_checking ++enable_silent_rules + enable_dependency_tracking + enable_largefile + enable_acl +@@ -2069,6 +2074,8 @@ 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 +@@ -3320,7 +3327,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + ac_config_headers="$ac_config_headers config.h:config_h.in" + + +-am__api_version='1.12' ++am__api_version='1.15' + + # Find a good install program. We prefer a C program (faster), + # so one script is as good as another. But avoid the broken or +@@ -3492,8 +3499,8 @@ test "$program_suffix" != NONE && + 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` ++# 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 +@@ -3504,15 +3511,15 @@ if test x"${MISSING+set}" != xset; then + esac + fi + # Use eval to expand $SHELL +-if eval "$MISSING --run true"; then +- am_missing_run="$MISSING --run " ++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 ++if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; +@@ -3745,6 +3752,45 @@ else + 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." +@@ -3801,12 +3847,16 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + # <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. ++# We need awk for the "check" target (and possibly the TAP driver). 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 -' + + +@@ -3814,6 +3864,49 @@ 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 ++ ++ + SED_FEATURE_VERSION=4.2.2 + + cat >>confdefs.h <<_ACEOF +@@ -4613,6 +4706,65 @@ 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" +@@ -21890,7 +22042,6 @@ 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$//' +@@ -23208,7 +23359,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { +- # Autoconf 2.62 quotes --file arguments for eval, but not when files ++ # 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 +@@ -23259,7 +23410,7 @@ $as_echo X"$mf" | + 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 ++ 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 +diff --git a/doc/Makefile.in b/doc/Makefile.in +index 84e07d1..2d82c75 100644 +--- a/doc/Makefile.in ++++ b/doc/Makefile.in +@@ -1,7 +1,7 @@ +-# Makefile.in generated by automake 1.12.2 from Makefile.am. ++# Makefile.in generated by automake 1.15 from Makefile.am. + # @configure_input@ + +-# Copyright (C) 1994-2012 Free Software Foundation, Inc. ++# Copyright (C) 1994-2014 Free Software Foundation, Inc. + + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, +@@ -16,23 +16,61 @@ + + + VPATH = @srcdir@ +-am__make_dryrun = \ +- { \ +- am__dry=no; \ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++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 \ + *\\[\ \ ]*) \ +- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ +- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ +- *) \ +- for am__flg in $$MAKEFLAGS; do \ +- case $$am__flg in \ +- *=*|--*) ;; \ +- *n*) am__dry=yes; break;; \ +- esac; \ +- done;; \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ +- test $$am__dry = yes; \ +- } ++ 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@ +@@ -51,11 +89,6 @@ POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ + subdir = doc +-DIST_COMMON = $(dist_man_MANS) $(dist_noinst_DATA) \ +- $(dist_noinst_SCRIPTS) $(sed_TEXINFOS) $(srcdir)/Makefile.am \ +- $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ +- $(srcdir)/version.texi $(top_srcdir)/build-aux/mdate-sh \ +- $(top_srcdir)/build-aux/texinfo.tex + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ +@@ -115,13 +148,56 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(dist_noinst_SCRIPTS) \ ++ $(srcdir)/version.texi $(srcdir)/stamp-vti $(dist_noinst_DATA) \ ++ $(am__DIST_COMMON) + mkinstalldirs = $(install_sh) -d + CONFIG_HEADER = $(top_builddir)/config.h + CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + SCRIPTS = $(dist_noinst_SCRIPTS) ++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 = ++AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) ++am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) ++am__v_DVIPS_0 = @echo " DVIPS " $@; ++am__v_DVIPS_1 = ++AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) ++am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) ++am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; ++am__v_MAKEINFO_1 = ++AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) ++am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) ++am__v_INFOHTML_0 = @echo " INFOHTML" $@; ++am__v_INFOHTML_1 = ++AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) ++am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) ++am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; ++am__v_TEXI2DVI_1 = ++AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) ++am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) ++am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; ++am__v_TEXI2PDF_1 = ++AM_V_texinfo = $(am__v_texinfo_@AM_V@) ++am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) ++am__v_texinfo_0 = -q ++am__v_texinfo_1 = ++AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) ++am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) ++am__v_texidevnull_0 = > /dev/null ++am__v_texidevnull_1 = + INFO_DEPS = $(srcdir)/sed.info + TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex + am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +@@ -170,12 +246,17 @@ man1dir = $(mandir)/man1 + NROFF = nroff + MANS = $(dist_man_MANS) + DATA = $(dist_noinst_DATA) ++am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) ++am__DIST_COMMON = $(dist_man_MANS) $(sed_TEXINFOS) \ ++ $(srcdir)/Makefile.in $(top_srcdir)/build-aux/mdate-sh \ ++ $(top_srcdir)/build-aux/texinfo.tex + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + pkglibexecdir = @pkglibexecdir@ + ACLOCAL = @ACLOCAL@ + ALLOCA = @ALLOCA@ + ALLOCA_H = @ALLOCA_H@ + AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ + APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ + AR = @AR@ + ARFLAGS = @ARFLAGS@ +@@ -972,10 +1053,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + exit 1;; \ + esac; \ + done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ +- $(AUTOMAKE) --gnits doc/Makefile +-.PRECIOUS: Makefile ++ $(AUTOMAKE) --gnu doc/Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ +@@ -995,7 +1075,7 @@ $(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__aclocal_m4_deps): + + .texi.info: +- restore=: && backupdir="$(am__leading_dot)am$$$$" && \ ++ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ +@@ -1017,27 +1097,25 @@ $(am__aclocal_m4_deps): + rm -rf $$backupdir; exit $$rc + + .texi.dvi: +- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ ++ $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ +- $(TEXI2DVI) --clean $< ++ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ ++ $< + + .texi.pdf: +- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ ++ $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ +- $(TEXI2PDF) --clean $< ++ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ ++ $< + + .texi.html: +- rm -rf $(@:.html=.htp) +- if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ ++ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) ++ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ +- rm -rf $@; \ +- if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ +- mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ ++ rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ +- if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ +- rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ +- exit 1; \ ++ rm -rf $(@:.html=.htp); exit 1; \ + fi + $(srcdir)/sed.info: sed.texi $(srcdir)/version.texi $(sed_TEXINFOS) + sed.dvi: sed.texi $(srcdir)/version.texi $(sed_TEXINFOS) +@@ -1050,21 +1128,22 @@ $(srcdir)/stamp-vti: sed.texi $(top_srcdir)/configure + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ +- echo "@set VERSION $(VERSION)") > vti.tmp +- @cmp -s vti.tmp $(srcdir)/version.texi \ +- || (echo "Updating $(srcdir)/version.texi"; \ +- cp vti.tmp $(srcdir)/version.texi) +- -@rm -f vti.tmp ++ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ ++ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ ++ || (echo "Updating $(srcdir)/version.texi" && \ ++ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ ++ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ ++ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ + @cp $(srcdir)/version.texi $@ + + mostlyclean-vti: +- -rm -f vti.tmp ++ -rm -f vti.tmp* $(srcdir)/version.texi.tmp* + + maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi + .dvi.ps: +- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ +- $(DVIPS) -o $@ $< ++ $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ ++ $(DVIPS) $(AM_V_texinfo) -o $@ $< + + uninstall-dvi-am: + @$(NORMAL_UNINSTALL) +@@ -1143,8 +1222,7 @@ dist-info: $(INFO_DEPS) + done + + mostlyclean-aminfo: +- -rm -rf sed.aux sed.cp sed.cps sed.fn sed.fns sed.ky sed.log sed.op sed.pg \ +- sed.tmp sed.toc sed.tp sed.vr sed.vrs ++ -rm -rf sed.t2d sed.t2p + + clean-aminfo: + -test -z "sed.dvi sed.pdf sed.ps sed.html" \ +@@ -1199,29 +1277,14 @@ uninstall-man1: + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +-tags: TAGS +-TAGS: ++tags TAGS: + +-ctags: CTAGS +-CTAGS: ++ctags CTAGS: + + cscope cscopelist: + + + distdir: $(DISTFILES) +- @list='$(MANS)'; if test -n "$$list"; then \ +- list=`for p in $$list; do \ +- if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ +- if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ +- if test -n "$$list" && \ +- grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ +- echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \ +- grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ +- echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ +- echo " typically 'make maintainer-clean' will remove them" >&2; \ +- exit 1; \ +- else :; fi; \ +- else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ +@@ -1455,19 +1518,21 @@ uninstall-man: uninstall-man1 + .MAKE: install-am install-strip + + .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ +- dist-hook dist-info distclean distclean-generic distdir 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-man1 \ +- install-pdf install-pdf-am install-ps install-ps-am \ +- install-strip installcheck installcheck-am installdirs \ +- maintainer-clean maintainer-clean-aminfo \ ++ cscopelist-am ctags-am dist-hook dist-info distclean \ ++ distclean-generic distdir 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-man1 install-pdf install-pdf-am install-ps \ ++ install-ps-am install-strip installcheck installcheck-am \ ++ installdirs maintainer-clean maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ +- pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ +- uninstall-html-am uninstall-info-am uninstall-man \ +- uninstall-man1 uninstall-pdf-am uninstall-ps-am ++ pdf-am ps ps-am tags-am uninstall uninstall-am \ ++ uninstall-dvi-am uninstall-html-am uninstall-info-am \ ++ uninstall-man uninstall-man1 uninstall-pdf-am uninstall-ps-am ++ ++.PRECIOUS: Makefile + + + # To produce better quality output, in the example sed +diff --git a/doc/sed.1 b/doc/sed.1 +index 440287a..5ab79af 100644 +--- a/doc/sed.1 ++++ b/doc/sed.1 +@@ -1,5 +1,5 @@ + .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.28. +-.TH SED "1" "December 2012" "sed 4.2.2" "User Commands" ++.TH SED "1" "May 2016" "sed 4.2.2" "User Commands" + .SH NAME + sed \- stream editor for filtering and transforming text + .SH SYNOPSIS +diff --git a/doc/sed.info b/doc/sed.info +index 38235da..1553e3e 100644 +--- a/doc/sed.info ++++ b/doc/sed.info +@@ -1,13 +1,6 @@ +-This is ../../doc/sed.info, produced by makeinfo version 4.13 from +-../../doc//config.texi. ++This is sed.info, produced by makeinfo version 6.0 from sed.texi. + +-INFO-DIR-SECTION Text creation and manipulation +-START-INFO-DIR-ENTRY +-* sed: (sed). Stream EDitor. +- +-END-INFO-DIR-ENTRY +- +- This file documents version 4.2.2 of GNU `sed', a stream editor. ++This file documents version 4.2.2 of GNU 'sed', a stream editor. + + Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004 Free Software + Foundation, Inc. +@@ -16,13 +9,18 @@ Foundation, Inc. + Documentation License as published by the Free Software Foundation; + either version 1.1, or (at your option) any later version. + +- You should have received a copy of the GNU Free Documentation +-License along with GNU `sed'; see the file `COPYING.DOC'. If not, +-write to the Free Software Foundation, 59 Temple Place - Suite 330, +-Boston, MA 02110-1301, USA. ++ You should have received a copy of the GNU Free Documentation License ++along with GNU 'sed'; see the file 'COPYING.DOC'. If not, write to the ++Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++02110-1301, USA. + + There are no Cover Texts and no Invariant Sections; this text, along + with its equivalent in the printed manual, constitutes the Title Page. ++INFO-DIR-SECTION Text creation and manipulation ++START-INFO-DIR-ENTRY ++* sed: (sed). Stream EDitor. ++ ++END-INFO-DIR-ENTRY + + + File: sed.info, Node: Top, Next: Introduction, Up: (dir) +@@ -30,7 +28,7 @@ File: sed.info, Node: Top, Next: Introduction, Up: (dir) + sed, a stream editor + ******************** + +-This file documents version 4.2.2 of GNU `sed', a stream editor. ++This file documents version 4.2.2 of GNU 'sed', a stream editor. + + Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004 Free Software + Foundation, Inc. +@@ -39,10 +37,10 @@ Foundation, Inc. + Documentation License as published by the Free Software Foundation; + either version 1.1, or (at your option) any later version. + +- You should have received a copy of the GNU Free Documentation +-License along with GNU `sed'; see the file `COPYING.DOC'. If not, +-write to the Free Software Foundation, 59 Temple Place - Suite 330, +-Boston, MA 02110-1301, USA. ++ You should have received a copy of the GNU Free Documentation License ++along with GNU 'sed'; see the file 'COPYING.DOC'. If not, write to the ++Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA ++02110-1301, USA. + + There are no Cover Texts and no Invariant Sections; this text, along + with its equivalent in the printed manual, constitutes the Title Page. +@@ -51,29 +49,29 @@ with its equivalent in the printed manual, constitutes the Title Page. + + * Introduction:: Introduction + * Invoking sed:: Invocation +-* sed Programs:: `sed' programs ++* sed Programs:: 'sed' programs + * Examples:: Some sample scripts +-* Limitations:: Limitations and (non-)limitations of GNU `sed' +-* Other Resources:: Other resources for learning about `sed' ++* Limitations:: Limitations and (non-)limitations of GNU 'sed' ++* Other Resources:: Other resources for learning about 'sed' + * Reporting Bugs:: Reporting bugs + +-* Extended regexps:: `egrep'-style regular expressions ++* Extended regexps:: 'egrep'-style regular expressions + + * Concept Index:: A menu with all the topics in this manual. +-* Command and Option Index:: A menu with all `sed' commands and ++* Command and Option Index:: A menu with all 'sed' commands and + command-line options. + +---- The detailed node listing --- ++-- The detailed node listing -- + + sed Programs: +-* Execution Cycle:: How `sed' works +-* Addresses:: Selecting lines with `sed' ++* Execution Cycle:: How 'sed' works ++* Addresses:: Selecting lines with 'sed' + * Regular Expressions:: Overview of regular expression syntax + * Common Commands:: Often used commands +-* The "s" Command:: `sed''s Swiss Army Knife ++* The "s" Command:: 'sed''s Swiss Army Knife + * Other Commands:: Less frequently used commands +-* Programming Commands:: Commands for `sed' gurus +-* Extended Commands:: Commands specific of GNU `sed' ++* Programming Commands:: Commands for 'sed' gurus ++* Extended Commands:: Commands specific of GNU 'sed' + * Escapes:: Specifying special characters + + Examples: +@@ -95,19 +93,21 @@ Examples: + * uniq -u:: Remove all duplicated lines + * cat -s:: Squeezing blank lines + ++ ++ + + File: sed.info, Node: Introduction, Next: Invoking sed, Prev: Top, Up: Top + + 1 Introduction + ************** + +-`sed' is a stream editor. A stream editor is used to perform basic text ++'sed' is a stream editor. A stream editor is used to perform basic text + transformations on an input stream (a file or input from a pipeline). + While in some ways similar to an editor which permits scripted edits +-(such as `ed'), `sed' works by making only one pass over the input(s), +-and is consequently more efficient. But it is `sed''s ability to +-filter text in a pipeline which particularly distinguishes it from +-other types of editors. ++(such as 'ed'), 'sed' works by making only one pass over the input(s), ++and is consequently more efficient. But it is 'sed''s ability to filter ++text in a pipeline which particularly distinguishes it from other types ++of editors. + + + File: sed.info, Node: Invoking sed, Next: sed Programs, Prev: Introduction, Up: Top +@@ -115,340 +115,338 @@ File: sed.info, Node: Invoking sed, Next: sed Programs, Prev: Introduction, + 2 Invocation + ************ + +-Normally `sed' is invoked like this: ++Normally 'sed' is invoked like this: + + sed SCRIPT INPUTFILE... + +- The full format for invoking `sed' is: ++ The full format for invoking 'sed' is: + + sed OPTIONS... [SCRIPT] [INPUTFILE...] + +- If you do not specify INPUTFILE, or if INPUTFILE is `-', `sed' ++ If you do not specify INPUTFILE, or if INPUTFILE is '-', 'sed' + filters the contents of the standard input. The SCRIPT is actually the +-first non-option parameter, which `sed' specially considers a script +-and not an input file if (and only if) none of the other OPTIONS +-specifies a script to be executed, that is if neither of the `-e' and +-`-f' options is specified. ++first non-option parameter, which 'sed' specially considers a script and ++not an input file if (and only if) none of the other OPTIONS specifies a ++script to be executed, that is if neither of the '-e' and '-f' options ++is specified. + +- `sed' may be invoked with the following command-line options: ++ 'sed' may be invoked with the following command-line options: + +-`--version' +- Print out the version of `sed' that is being run and a copyright ++'--version' ++ Print out the version of 'sed' that is being run and a copyright + notice, then exit. + +-`--help' ++'--help' + Print a usage message briefly summarizing these command-line + options and the bug-reporting address, then exit. + +-`-n' +-`--quiet' +-`--silent' +- By default, `sed' prints out the pattern space at the end of each +- cycle through the script (*note How `sed' works: Execution Cycle.). +- These options disable this automatic printing, and `sed' only +- produces output when explicitly told to via the `p' command. ++'-n' ++'--quiet' ++'--silent' ++ By default, 'sed' prints out the pattern space at the end of each ++ cycle through the script (*note How 'sed' works: Execution Cycle.). ++ These options disable this automatic printing, and 'sed' only ++ produces output when explicitly told to via the 'p' command. + +-`-e SCRIPT' +-`--expression=SCRIPT' ++'-e SCRIPT' ++'--expression=SCRIPT' + Add the commands in SCRIPT to the set of commands to be run while + processing the input. + +-`-f SCRIPT-FILE' +-`--file=SCRIPT-FILE' ++'-f SCRIPT-FILE' ++'--file=SCRIPT-FILE' + Add the commands contained in the file SCRIPT-FILE to the set of + commands to be run while processing the input. + +-`-i[SUFFIX]' +-`--in-place[=SUFFIX]' ++'-i[SUFFIX]' ++'--in-place[=SUFFIX]' + This option specifies that files are to be edited in-place. GNU +- `sed' does this by creating a temporary file and sending output to ++ 'sed' does this by creating a temporary file and sending output to + this file rather than to the standard output.(1). + +- This option implies `-s'. ++ This option implies '-s'. + + When the end of the file is reached, the temporary file is renamed +- to the output file's original name. The extension, if supplied, +- is used to modify the name of the old file before renaming the ++ to the output file's original name. The extension, if supplied, is ++ used to modify the name of the old file before renaming the + temporary file, thereby making a backup copy(2)). + +- This rule is followed: if the extension doesn't contain a `*', +- then it is appended to the end of the current filename as a +- suffix; if the extension does contain one or more `*' characters, +- then _each_ asterisk is replaced with the current filename. This +- allows you to add a prefix to the backup file, instead of (or in +- addition to) a suffix, or even to place backup copies of the +- original files into another directory (provided the directory +- already exists). ++ This rule is followed: if the extension doesn't contain a '*', then ++ it is appended to the end of the current filename as a suffix; if ++ the extension does contain one or more '*' characters, then _each_ ++ asterisk is replaced with the current filename. This allows you to ++ add a prefix to the backup file, instead of (or in addition to) a ++ suffix, or even to place backup copies of the original files into ++ another directory (provided the directory already exists). + + If no extension is supplied, the original file is overwritten + without making a backup. + +-`-l N' +-`--line-length=N' +- Specify the default line-wrap length for the `l' command. A +- length of 0 (zero) means to never wrap long lines. If not +- specified, it is taken to be 70. ++'-l N' ++'--line-length=N' ++ Specify the default line-wrap length for the 'l' command. A length ++ of 0 (zero) means to never wrap long lines. If not specified, it ++ is taken to be 70. + +-`--posix' +- GNU `sed' includes several extensions to POSIX sed. In order to ++'--posix' ++ GNU 'sed' includes several extensions to POSIX sed. In order to + simplify writing portable scripts, this option disables all the + extensions that this manual documents, including additional +- commands. Most of the extensions accept `sed' programs that are +- outside the syntax mandated by POSIX, but some of them (such as +- the behavior of the `N' command described in *note Reporting +- Bugs::) actually violate the standard. If you want to disable +- only the latter kind of extension, you can set the +- `POSIXLY_CORRECT' variable to a non-empty value. +- +-`-b' +-`--binary' ++ commands. Most of the extensions accept 'sed' programs that are ++ outside the syntax mandated by POSIX, but some of them (such as the ++ behavior of the 'N' command described in *note Reporting Bugs::) ++ actually violate the standard. If you want to disable only the ++ latter kind of extension, you can set the 'POSIXLY_CORRECT' ++ variable to a non-empty value. ++ ++'-b' ++'--binary' + This option is available on every platform, but is only effective + where the operating system makes a distinction between text files + and binary files. When such a distinction is made--as is the case + for MS-DOS, Windows, Cygwin--text files are composed of lines + separated by a carriage return _and_ a line feed character, and +- `sed' does not see the ending CR. When this option is specified, +- `sed' will open input files in binary mode, thus not requesting ++ 'sed' does not see the ending CR. When this option is specified, ++ 'sed' will open input files in binary mode, thus not requesting + this special processing and considering lines to end at a line + feed. + +-`--follow-symlinks' ++'--follow-symlinks' + This option is available only on platforms that support symbolic +- links and has an effect only if option `-i' is specified. In this ++ links and has an effect only if option '-i' is specified. In this + case, if the file that is specified on the command line is a +- symbolic link, `sed' will follow the link and edit the ultimate ++ symbolic link, 'sed' will follow the link and edit the ultimate + destination of the link. The default behavior is to break the + symbolic link, so that the link destination will not be modified. + +-`-r' +-`--regexp-extended' ++'-r' ++'--regexp-extended' + Use extended regular expressions rather than basic regular +- expressions. Extended regexps are those that `egrep' accepts; +- they can be clearer because they usually have less backslashes, +- but are a GNU extension and hence scripts that use them are not +- portable. *Note Extended regular expressions: Extended regexps. +- +-`-s' +-`--separate' +- By default, `sed' will consider the files specified on the command +- line as a single continuous long stream. This GNU `sed' extension +- allows the user to consider them as separate files: range +- addresses (such as `/abc/,/def/') are not allowed to span several +- files, line numbers are relative to the start of each file, `$' +- refers to the last line of each file, and files invoked from the +- `R' commands are rewound at the start of each file. +- +-`-u' +-`--unbuffered' ++ expressions. Extended regexps are those that 'egrep' accepts; they ++ can be clearer because they usually have less backslashes, but are ++ a GNU extension and hence scripts that use them are not portable. ++ *Note Extended regular expressions: Extended regexps. ++ ++'-s' ++'--separate' ++ By default, 'sed' will consider the files specified on the command ++ line as a single continuous long stream. This GNU 'sed' extension ++ allows the user to consider them as separate files: range addresses ++ (such as '/abc/,/def/') are not allowed to span several files, line ++ numbers are relative to the start of each file, '$' refers to the ++ last line of each file, and files invoked from the 'R' commands are ++ rewound at the start of each file. ++ ++'-u' ++'--unbuffered' + Buffer both input and output as minimally as practical. (This is +- particularly useful if the input is coming from the likes of `tail ++ particularly useful if the input is coming from the likes of 'tail + -f', and you wish to see the transformed output as soon as + possible.) + +-`-z' +-`--null-data' +-`--zero-terminated' ++'-z' ++'--null-data' ++'--zero-terminated' + Treat the input as a set of lines, each terminated by a zero byte +- (the ASCII `NUL' character) instead of a newline. This option can +- be used with commands like `sort -z' and `find -print0' to process ++ (the ASCII 'NUL' character) instead of a newline. This option can ++ be used with commands like 'sort -z' and 'find -print0' to process + arbitrary file names. + +- If no `-e', `-f', `--expression', or `--file' options are given on +-the command-line, then the first non-option argument on the command +-line is taken to be the SCRIPT to be executed. ++ If no '-e', '-f', '--expression', or '--file' options are given on ++the command-line, then the first non-option argument on the command line ++is taken to be the SCRIPT to be executed. + + If any command-line parameters remain after processing the above, + these parameters are interpreted as the names of input files to be +-processed. A file name of `-' refers to the standard input stream. +-The standard input will be processed if no file names are specified. ++processed. A file name of '-' refers to the standard input stream. The ++standard input will be processed if no file names are specified. + + ---------- Footnotes ---------- + +- (1) This applies to commands such as `=', `a', `c', `i', `l', `p'. +-You can still write to the standard output by using the `w' or `W' +-commands together with the `/dev/stdout' special file ++ (1) This applies to commands such as '=', 'a', 'c', 'i', 'l', 'p'. ++You can still write to the standard output by using the 'w' or 'W' ++commands together with the '/dev/stdout' special file + +- (2) Note that GNU `sed' creates the backup file whether or not any ++ (2) Note that GNU 'sed' creates the backup file whether or not any + output is actually changed. + + + File: sed.info, Node: sed Programs, Next: Examples, Prev: Invoking sed, Up: Top + +-3 `sed' Programs ++3 'sed' Programs + **************** + +-A `sed' program consists of one or more `sed' commands, passed in by +-one or more of the `-e', `-f', `--expression', and `--file' options, or +-the first non-option argument if zero of these options are used. This +-document will refer to "the" `sed' script; this is understood to mean ++A 'sed' program consists of one or more 'sed' commands, passed in by one ++or more of the '-e', '-f', '--expression', and '--file' options, or the ++first non-option argument if zero of these options are used. This ++document will refer to "the" 'sed' script; this is understood to mean + the in-order catenation of all of the SCRIPTs and SCRIPT-FILEs passed + in. + + Commands within a SCRIPT or SCRIPT-FILE can be separated by +-semicolons (`;') or newlines (ASCII 10). Some commands, due to their ++semicolons (';') or newlines (ASCII 10). Some commands, due to their + syntax, cannot be followed by semicolons working as command separators +-and thus should be terminated with newlines or be placed at the end of +-a SCRIPT or SCRIPT-FILE. Commands can also be preceded with optional ++and thus should be terminated with newlines or be placed at the end of a ++SCRIPT or SCRIPT-FILE. Commands can also be preceded with optional + non-significant whitespace characters. + +- Each `sed' command consists of an optional address or address range, ++ Each 'sed' command consists of an optional address or address range, + followed by a one-character command name and any additional + command-specific code. + + * Menu: + +-* Execution Cycle:: How `sed' works +-* Addresses:: Selecting lines with `sed' ++* Execution Cycle:: How 'sed' works ++* Addresses:: Selecting lines with 'sed' + * Regular Expressions:: Overview of regular expression syntax + * Common Commands:: Often used commands +-* The "s" Command:: `sed''s Swiss Army Knife ++* The "s" Command:: 'sed''s Swiss Army Knife + * Other Commands:: Less frequently used commands +-* Programming Commands:: Commands for `sed' gurus +-* Extended Commands:: Commands specific of GNU `sed' ++* Programming Commands:: Commands for 'sed' gurus ++* Extended Commands:: Commands specific of GNU 'sed' + * Escapes:: Specifying special characters + + + File: sed.info, Node: Execution Cycle, Next: Addresses, Up: sed Programs + +-3.1 How `sed' Works ++3.1 How 'sed' Works + =================== + +-`sed' maintains two data buffers: the active _pattern_ space, and the +-auxiliary _hold_ space. Both are initially empty. ++'sed' maintains two data buffers: the active _pattern_ space, and the ++auxiliary _hold_ space. Both are initially empty. + +- `sed' operates by performing the following cycle on each line of +-input: first, `sed' reads one line from the input stream, removes any +-trailing newline, and places it in the pattern space. Then commands +-are executed; each command can have an address associated to it: +-addresses are a kind of condition code, and a command is only executed +-if the condition is verified before the command is to be executed. ++ 'sed' operates by performing the following cycle on each line of ++input: first, 'sed' reads one line from the input stream, removes any ++trailing newline, and places it in the pattern space. Then commands are ++executed; each command can have an address associated to it: addresses ++are a kind of condition code, and a command is only executed if the ++condition is verified before the command is to be executed. + +- When the end of the script is reached, unless the `-n' option is in +-use, the contents of pattern space are printed out to the output +-stream, adding back the trailing newline if it was removed.(1) Then the +-next cycle starts for the next input line. ++ When the end of the script is reached, unless the '-n' option is in ++use, the contents of pattern space are printed out to the output stream, ++adding back the trailing newline if it was removed.(1) Then the next ++cycle starts for the next input line. + +- Unless special commands (like `D') are used, the pattern space is +-deleted between two cycles. The hold space, on the other hand, keeps +-its data between cycles (see commands `h', `H', `x', `g', `G' to move ++ Unless special commands (like 'D') are used, the pattern space is ++deleted between two cycles. The hold space, on the other hand, keeps ++its data between cycles (see commands 'h', 'H', 'x', 'g', 'G' to move + data between both buffers). + + ---------- Footnotes ---------- + +- (1) Actually, if `sed' prints a line without the terminating +-newline, it will nevertheless print the missing newline as soon as more +-text is sent to the same output stream, which gives the "least expected +-surprise" even though it does not make commands like `sed -n p' exactly +-identical to `cat'. ++ (1) Actually, if 'sed' prints a line without the terminating newline, ++it will nevertheless print the missing newline as soon as more text is ++sent to the same output stream, which gives the "least expected ++surprise" even though it does not make commands like 'sed -n p' exactly ++identical to 'cat'. + + + File: sed.info, Node: Addresses, Next: Regular Expressions, Prev: Execution Cycle, Up: sed Programs + +-3.2 Selecting lines with `sed' ++3.2 Selecting lines with 'sed' + ============================== + +-Addresses in a `sed' script can be in any of the following forms: +-`NUMBER' ++Addresses in a 'sed' script can be in any of the following forms: ++'NUMBER' + Specifying a line number will match only that line in the input. +- (Note that `sed' counts lines continuously across all input files +- unless `-i' or `-s' options are specified.) ++ (Note that 'sed' counts lines continuously across all input files ++ unless '-i' or '-s' options are specified.) + +-`FIRST~STEP' ++'FIRST~STEP' + This GNU extension matches every STEPth line starting with line + FIRST. In particular, lines will be selected when there exists a + non-negative N such that the current line-number equals FIRST + (N + * STEP). Thus, to select the odd-numbered lines, one would use +- `1~2'; to pick every third line starting with the second, `2~3' ++ '1~2'; to pick every third line starting with the second, '2~3' + would be used; to pick every fifth line starting with the tenth, +- use `10~5'; and `50~0' is just an obscure way of saying `50'. ++ use '10~5'; and '50~0' is just an obscure way of saying '50'. + +-`$' ++'$' + This address matches the last line of the last file of input, or +- the last line of each file when the `-i' or `-s' options are ++ the last line of each file when the '-i' or '-s' options are + specified. + +-`/REGEXP/' ++'/REGEXP/' + This will select any line which matches the regular expression +- REGEXP. If REGEXP itself includes any `/' characters, each must +- be escaped by a backslash (`\'). ++ REGEXP. If REGEXP itself includes any '/' characters, each must be ++ escaped by a backslash ('\'). + +- The empty regular expression `//' repeats the last regular ++ The empty regular expression '//' repeats the last regular + expression match (the same holds if the empty regular expression is +- passed to the `s' command). Note that modifiers to regular ++ passed to the 's' command). Note that modifiers to regular + expressions are evaluated when the regular expression is compiled, + thus it is invalid to specify them together with the empty regular + expression. + +-`\%REGEXP%' +- (The `%' may be replaced by any other single character.) ++'\%REGEXP%' ++ (The '%' may be replaced by any other single character.) + + This also matches the regular expression REGEXP, but allows one to +- use a different delimiter than `/'. This is particularly useful +- if the REGEXP itself contains a lot of slashes, since it avoids +- the tedious escaping of every `/'. If REGEXP itself includes any +- delimiter characters, each must be escaped by a backslash (`\'). +- +-`/REGEXP/I' +-`\%REGEXP%I' +- The `I' modifier to regular-expression matching is a GNU extension ++ use a different delimiter than '/'. This is particularly useful if ++ the REGEXP itself contains a lot of slashes, since it avoids the ++ tedious escaping of every '/'. If REGEXP itself includes any ++ delimiter characters, each must be escaped by a backslash ('\'). ++ ++'/REGEXP/I' ++'\%REGEXP%I' ++ The 'I' modifier to regular-expression matching is a GNU extension + which causes the REGEXP to be matched in a case-insensitive manner. + +-`/REGEXP/M' +-`\%REGEXP%M' +- The `M' modifier to regular-expression matching is a GNU `sed' +- extension which directs GNU `sed' to match the regular expression +- in `multi-line' mode. The modifier causes `^' and `$' to match ++'/REGEXP/M' ++'\%REGEXP%M' ++ The 'M' modifier to regular-expression matching is a GNU 'sed' ++ extension which directs GNU 'sed' to match the regular expression ++ in 'multi-line' mode. The modifier causes '^' and '$' to match + respectively (in addition to the normal behavior) the empty string + after a newline, and the empty string before a newline. There are +- special character sequences (`\`' and `\'') which always match the ++ special character sequences ('\`' and '\'') which always match the + beginning or the end of the buffer. In addition, the period + character does not match a new-line character in multi-line mode. + +- +- If no addresses are given, then all lines are matched; if one +-address is given, then only lines matching that address are matched. ++ If no addresses are given, then all lines are matched; if one address ++is given, then only lines matching that address are matched. + + An address range can be specified by specifying two addresses +-separated by a comma (`,'). An address range matches lines starting ++separated by a comma (','). An address range matches lines starting + from where the first address matches, and continues until the second + address matches (inclusively). + +- If the second address is a REGEXP, then checking for the ending +-match will start with the line _following_ the line which matched the +-first address: a range will always span at least two lines (except of +-course if the input stream ends). ++ If the second address is a REGEXP, then checking for the ending match ++will start with the line _following_ the line which matched the first ++address: a range will always span at least two lines (except of course ++if the input stream ends). + + If the second address is a NUMBER less than (or equal to) the line + matching the first address, then only the one line is matched. + +- GNU `sed' also supports some special two-address forms; all these +-are GNU extensions: +-`0,/REGEXP/' +- A line number of `0' can be used in an address specification like +- `0,/REGEXP/' so that `sed' will try to match REGEXP in the first +- input line too. In other words, `0,/REGEXP/' is similar to +- `1,/REGEXP/', except that if ADDR2 matches the very first line of +- input the `0,/REGEXP/' form will consider it to end the range, +- whereas the `1,/REGEXP/' form will match the beginning of its +- range and hence make the range span up to the _second_ occurrence +- of the regular expression. +- +- Note that this is the only place where the `0' address makes +- sense; there is no 0-th line and commands which are given the `0' +- address in any other way will give an error. +- +-`ADDR1,+N' ++ GNU 'sed' also supports some special two-address forms; all these are ++GNU extensions: ++'0,/REGEXP/' ++ A line number of '0' can be used in an address specification like ++ '0,/REGEXP/' so that 'sed' will try to match REGEXP in the first ++ input line too. In other words, '0,/REGEXP/' is similar to ++ '1,/REGEXP/', except that if ADDR2 matches the very first line of ++ input the '0,/REGEXP/' form will consider it to end the range, ++ whereas the '1,/REGEXP/' form will match the beginning of its range ++ and hence make the range span up to the _second_ occurrence of the ++ regular expression. ++ ++ Note that this is the only place where the '0' address makes sense; ++ there is no 0-th line and commands which are given the '0' address ++ in any other way will give an error. ++ ++'ADDR1,+N' + Matches ADDR1 and the N lines following ADDR1. + +-`ADDR1,~N' ++'ADDR1,~N' + Matches ADDR1 and the lines following ADDR1 until the next line + whose input line number is a multiple of N. + +- Appending the `!' character to the end of an address specification +-negates the sense of the match. That is, if the `!' character follows ++ Appending the '!' character to the end of an address specification ++negates the sense of the match. That is, if the '!' character follows + an address range, then only lines which do _not_ match the address range +-will be selected. This also works for singleton addresses, and, +-perhaps perversely, for the null address. ++will be selected. This also works for singleton addresses, and, perhaps ++perversely, for the null address. + + + File: sed.info, Node: Regular Expressions, Next: Common Commands, Prev: Addresses, Up: sed Programs +@@ -456,10 +454,10 @@ File: sed.info, Node: Regular Expressions, Next: Common Commands, Prev: Addre + 3.3 Overview of Regular Expression Syntax + ========================================= + +-To know how to use `sed', people should understand regular expressions +-("regexp" for short). A regular expression is a pattern that is +-matched against a subject string from left to right. Most characters +-are "ordinary": they stand for themselves in a pattern, and match the ++To know how to use 'sed', people should understand regular expressions ++("regexp" for short). A regular expression is a pattern that is matched ++against a subject string from left to right. Most characters are ++"ordinary": they stand for themselves in a pattern, and match the + corresponding characters in the subject. As a trivial example, the + pattern + +@@ -470,190 +468,188 @@ power of regular expressions comes from the ability to include + alternatives and repetitions in the pattern. These are encoded in the + pattern by the use of "special characters", which do not stand for + themselves but instead are interpreted in some special way. Here is a +-brief description of regular expression syntax as used in `sed'. ++brief description of regular expression syntax as used in 'sed'. + +-`CHAR' ++'CHAR' + A single ordinary character matches itself. + +-`*' ++'*' + Matches a sequence of zero or more instances of matches for the + preceding regular expression, which must be an ordinary character, +- a special character preceded by `\', a `.', a grouped regexp (see ++ a special character preceded by '\', a '.', a grouped regexp (see + below), or a bracket expression. As a GNU extension, a postfixed +- regular expression can also be followed by `*'; for example, `a**' +- is equivalent to `a*'. POSIX 1003.1-2001 says that `*' stands for ++ regular expression can also be followed by '*'; for example, 'a**' ++ is equivalent to 'a*'. POSIX 1003.1-2001 says that '*' stands for + itself when it appears at the start of a regular expression or + subexpression, but many nonGNU implementations do not support this +- and portable scripts should instead use `\*' in these contexts. ++ and portable scripts should instead use '\*' in these contexts. + +-`\+' +- As `*', but matches one or more. It is a GNU extension. ++'\+' ++ As '*', but matches one or more. It is a GNU extension. + +-`\?' +- As `*', but only matches zero or one. It is a GNU extension. ++'\?' ++ As '*', but only matches zero or one. It is a GNU extension. + +-`\{I\}' +- As `*', but matches exactly I sequences (I is a decimal integer; ++'\{I\}' ++ As '*', but matches exactly I sequences (I is a decimal integer; + for portability, keep it between 0 and 255 inclusive). + +-`\{I,J\}' ++'\{I,J\}' + Matches between I and J, inclusive, sequences. + +-`\{I,\}' ++'\{I,\}' + Matches more than or equal to I sequences. + +-`\(REGEXP\)' ++'\(REGEXP\)' + Groups the inner REGEXP as a whole, this is used to: + +- * Apply postfix operators, like `\(abcd\)*': this will search +- for zero or more whole sequences of `abcd', while `abcd*' +- would search for `abc' followed by zero or more occurrences +- of `d'. Note that support for `\(abcd\)*' is required by +- POSIX 1003.1-2001, but many non-GNU implementations do not +- support it and hence it is not universally portable. ++ * Apply postfix operators, like '\(abcd\)*': this will search ++ for zero or more whole sequences of 'abcd', while 'abcd*' ++ would search for 'abc' followed by zero or more occurrences of ++ 'd'. Note that support for '\(abcd\)*' is required by POSIX ++ 1003.1-2001, but many non-GNU implementations do not support ++ it and hence it is not universally portable. + + * Use back references (see below). + +-`.' ++'.' + Matches any character, including newline. + +-`^' ++'^' + Matches the null string at beginning of the pattern space, i.e. + what appears after the circumflex must appear at the beginning of + the pattern space. + + In most scripts, pattern space is initialized to the content of +- each line (*note How `sed' works: Execution Cycle.). So, it is a +- useful simplification to think of `^#include' as matching only +- lines where `#include' is the first thing on line--if there are ++ each line (*note How 'sed' works: Execution Cycle.). So, it is a ++ useful simplification to think of '^#include' as matching only ++ lines where '#include' is the first thing on line--if there are + spaces before, for example, the match fails. This simplification + is valid as long as the original content of pattern space is not +- modified, for example with an `s' command. ++ modified, for example with an 's' command. + +- `^' acts as a special character only at the beginning of the +- regular expression or subexpression (that is, after `\(' or `\|'). +- Portable scripts should avoid `^' at the beginning of a ++ '^' acts as a special character only at the beginning of the ++ regular expression or subexpression (that is, after '\(' or '\|'). ++ Portable scripts should avoid '^' at the beginning of a + subexpression, though, as POSIX allows implementations that treat +- `^' as an ordinary character in that context. ++ '^' as an ordinary character in that context. + +-`$' +- It is the same as `^', but refers to end of pattern space. `$' ++'$' ++ It is the same as '^', but refers to end of pattern space. '$' + also acts as a special character only at the end of the regular +- expression or subexpression (that is, before `\)' or `\|'), and +- its use at the end of a subexpression is not portable. ++ expression or subexpression (that is, before '\)' or '\|'), and its ++ use at the end of a subexpression is not portable. + +-`[LIST]' +-`[^LIST]' +- Matches any single character in LIST: for example, `[aeiou]' ++'[LIST]' ++'[^LIST]' ++ Matches any single character in LIST: for example, '[aeiou]' + matches all vowels. A list may include sequences like +- `CHAR1-CHAR2', which matches any character between (inclusive) ++ 'CHAR1-CHAR2', which matches any character between (inclusive) + CHAR1 and CHAR2. + +- A leading `^' reverses the meaning of LIST, so that it matches any +- single character _not_ in LIST. To include `]' in the list, make +- it the first character (after the `^' if needed), to include `-' +- in the list, make it the first or last; to include `^' put it +- after the first character. ++ A leading '^' reverses the meaning of LIST, so that it matches any ++ single character _not_ in LIST. To include ']' in the list, make ++ it the first character (after the '^' if needed), to include '-' in ++ the list, make it the first or last; to include '^' put it after ++ the first character. + +- The characters `$', `*', `.', `[', and `\' are normally not +- special within LIST. For example, `[\*]' matches either `\' or +- `*', because the `\' is not special here. However, strings like +- `[.ch.]', `[=a=]', and `[:space:]' are special within LIST and ++ The characters '$', '*', '.', '[', and '\' are normally not special ++ within LIST. For example, '[\*]' matches either '\' or '*', ++ because the '\' is not special here. However, strings like ++ '[.ch.]', '[=a=]', and '[:space:]' are special within LIST and + represent collating symbols, equivalence classes, and character +- classes, respectively, and `[' is therefore special within LIST +- when it is followed by `.', `=', or `:'. Also, when not in +- `POSIXLY_CORRECT' mode, special escapes like `\n' and `\t' are ++ classes, respectively, and '[' is therefore special within LIST ++ when it is followed by '.', '=', or ':'. Also, when not in ++ 'POSIXLY_CORRECT' mode, special escapes like '\n' and '\t' are + recognized within LIST. *Note Escapes::. + +-`REGEXP1\|REGEXP2' ++'REGEXP1\|REGEXP2' + Matches either REGEXP1 or REGEXP2. Use parentheses to use complex + alternative regular expressions. The matching process tries each + alternative in turn, from left to right, and the first one that + succeeds is used. It is a GNU extension. + +-`REGEXP1REGEXP2' ++'REGEXP1REGEXP2' + Matches the concatenation of REGEXP1 and REGEXP2. Concatenation +- binds more tightly than `\|', `^', and `$', but less tightly than ++ binds more tightly than '\|', '^', and '$', but less tightly than + the other regular expression operators. + +-`\DIGIT' +- Matches the DIGIT-th `\(...\)' parenthesized subexpression in the ++'\DIGIT' ++ Matches the DIGIT-th '\(...\)' parenthesized subexpression in the + regular expression. This is called a "back reference". + Subexpressions are implicity numbered by counting occurrences of +- `\(' left-to-right. ++ '\(' left-to-right. + +-`\n' ++'\n' + Matches the newline character. + +-`\CHAR' +- Matches CHAR, where CHAR is one of `$', `*', `.', `[', `\', or `^'. +- Note that the only C-like backslash sequences that you can +- portably assume to be interpreted are `\n' and `\\'; in particular +- `\t' is not portable, and matches a `t' under most implementations +- of `sed', rather than a tab character. +- ++'\CHAR' ++ Matches CHAR, where CHAR is one of '$', '*', '.', '[', '\', or '^'. ++ Note that the only C-like backslash sequences that you can portably ++ assume to be interpreted are '\n' and '\\'; in particular '\t' is ++ not portable, and matches a 't' under most implementations of ++ 'sed', rather than a tab character. + +- Note that the regular expression matcher is greedy, i.e., matches +-are attempted from left to right and, if two or more matches are +-possible starting at the same character, it selects the longest. ++ Note that the regular expression matcher is greedy, i.e., matches are ++attempted from left to right and, if two or more matches are possible ++starting at the same character, it selects the longest. + + Examples: +-`abcdef' +- Matches `abcdef'. ++'abcdef' ++ Matches 'abcdef'. + +-`a*b' +- Matches zero or more `a's followed by a single `b'. For example, +- `b' or `aaaaab'. ++'a*b' ++ Matches zero or more 'a's followed by a single 'b'. For example, ++ 'b' or 'aaaaab'. + +-`a\?b' +- Matches `b' or `ab'. ++'a\?b' ++ Matches 'b' or 'ab'. + +-`a\+b\+' +- Matches one or more `a's followed by one or more `b's: `ab' is the +- shortest possible match, but other examples are `aaaab' or +- `abbbbb' or `aaaaaabbbbbbb'. ++'a\+b\+' ++ Matches one or more 'a's followed by one or more 'b's: 'ab' is the ++ shortest possible match, but other examples are 'aaaab' or 'abbbbb' ++ or 'aaaaaabbbbbbb'. + +-`.*' +-`.\+' ++'.*' ++'.\+' + These two both match all the characters in a string; however, the + first matches every string (including the empty string), while the + second matches only strings containing at least one character. + +-`^main.*(.*)' +- This matches a string starting with `main', followed by an opening +- and closing parenthesis. The `n', `(' and `)' need not be ++'^main.*(.*)' ++ This matches a string starting with 'main', followed by an opening ++ and closing parenthesis. The 'n', '(' and ')' need not be + adjacent. + +-`^#' +- This matches a string beginning with `#'. ++'^#' ++ This matches a string beginning with '#'. + +-`\\$' ++'\\$' + This matches a string ending with a single backslash. The regexp + contains two backslashes for escaping. + +-`\$' ++'\$' + Instead, this matches a string consisting of a single dollar sign, + because it is escaped. + +-`[a-zA-Z0-9]' ++'[a-zA-Z0-9]' + In the C locale, this matches any ASCII letters or digits. + +-`[^ tab]\+' +- (Here `tab' stands for a single tab character.) This matches a ++'[^ 'tab']\+' ++ (Here 'tab' stands for a single tab character.) This matches a + string of one or more characters, none of which is a space or a + tab. Usually this means a word. + +-`^\(.*\)\n\1$' ++'^\(.*\)\n\1$' + This matches a string consisting of two equal substrings separated + by a newline. + +-`.\{9\}A$' +- This matches nine characters followed by an `A'. +- +-`^.\{15\}A' +- This matches the start of a string that contains 16 characters, +- the last of which is an `A'. ++'.\{9\}A$' ++ This matches nine characters followed by an 'A'. + ++'^.\{15\}A' ++ This matches the start of a string that contains 16 characters, the ++ last of which is an 'A'. + + + File: sed.info, Node: Common Commands, Next: The "s" Command, Prev: Regular Expressions, Up: sed Programs +@@ -661,185 +657,183 @@ File: sed.info, Node: Common Commands, Next: The "s" Command, Prev: Regular E + 3.4 Often-Used Commands + ======================= + +-If you use `sed' at all, you will quite likely want to know these ++If you use 'sed' at all, you will quite likely want to know these + commands. + +-`#' ++'#' + [No addresses allowed.] + +- The `#' character begins a comment; the comment continues until +- the next newline. ++ The '#' character begins a comment; the comment continues until the ++ next newline. + + If you are concerned about portability, be aware that some +- implementations of `sed' (which are not POSIX conformant) may only ++ implementations of 'sed' (which are not POSIX conformant) may only + support a single one-line comment, and then only when the very +- first character of the script is a `#'. ++ first character of the script is a '#'. + +- Warning: if the first two characters of the `sed' script are `#n', +- then the `-n' (no-autoprint) option is forced. If you want to put ++ Warning: if the first two characters of the 'sed' script are '#n', ++ then the '-n' (no-autoprint) option is forced. If you want to put + a comment in the first line of your script and that comment begins +- with the letter `n' and you do not want this behavior, then be +- sure to either use a capital `N', or place at least one space +- before the `n'. ++ with the letter 'n' and you do not want this behavior, then be sure ++ to either use a capital 'N', or place at least one space before the ++ 'n'. + +-`q [EXIT-CODE]' ++'q [EXIT-CODE]' + This command only accepts a single address. + +- Exit `sed' without processing any more commands or input. Note ++ Exit 'sed' without processing any more commands or input. Note + that the current pattern space is printed if auto-print is not +- disabled with the `-n' options. The ability to return an exit +- code from the `sed' script is a GNU `sed' extension. ++ disabled with the '-n' options. The ability to return an exit code ++ from the 'sed' script is a GNU 'sed' extension. + +-`d' ++'d' + Delete the pattern space; immediately start next cycle. + +-`p' +- Print out the pattern space (to the standard output). This +- command is usually only used in conjunction with the `-n' +- command-line option. ++'p' ++ Print out the pattern space (to the standard output). This command ++ is usually only used in conjunction with the '-n' command-line ++ option. + +-`n' ++'n' + If auto-print is not disabled, print the pattern space, then, + regardless, replace the pattern space with the next line of input. +- If there is no more input then `sed' exits without processing any ++ If there is no more input then 'sed' exits without processing any + more commands. + +-`{ COMMANDS }' +- A group of commands may be enclosed between `{' and `}' characters. +- This is particularly useful when you want a group of commands to +- be triggered by a single address (or address-range) match. +- ++'{ COMMANDS }' ++ A group of commands may be enclosed between '{' and '}' characters. ++ This is particularly useful when you want a group of commands to be ++ triggered by a single address (or address-range) match. + + + File: sed.info, Node: The "s" Command, Next: Other Commands, Prev: Common Commands, Up: sed Programs + +-3.5 The `s' Command ++3.5 The 's' Command + =================== + +-The syntax of the `s' (as in substitute) command is +-`s/REGEXP/REPLACEMENT/FLAGS'. The `/' characters may be uniformly +-replaced by any other single character within any given `s' command. +-The `/' character (or whatever other character is used in its stead) +-can appear in the REGEXP or REPLACEMENT only if it is preceded by a `\' ++The syntax of the 's' (as in substitute) command is ++'s/REGEXP/REPLACEMENT/FLAGS'. The '/' characters may be uniformly ++replaced by any other single character within any given 's' command. ++The '/' character (or whatever other character is used in its stead) can ++appear in the REGEXP or REPLACEMENT only if it is preceded by a '\' + character. + +- The `s' command is probably the most important in `sed' and has a +-lot of different options. Its basic concept is simple: the `s' command ++ The 's' command is probably the most important in 'sed' and has a lot ++of different options. Its basic concept is simple: the 's' command + attempts to match the pattern space against the supplied REGEXP; if the + match is successful, then that portion of the pattern space which was + matched is replaced with REPLACEMENT. + +- The REPLACEMENT can contain `\N' (N being a number from 1 to 9, ++ The REPLACEMENT can contain '\N' (N being a number from 1 to 9, + inclusive) references, which refer to the portion of the match which is +-contained between the Nth `\(' and its matching `\)'. Also, the +-REPLACEMENT can contain unescaped `&' characters which reference the +-whole matched portion of the pattern space. Finally, as a GNU `sed' ++contained between the Nth '\(' and its matching '\)'. Also, the ++REPLACEMENT can contain unescaped '&' characters which reference the ++whole matched portion of the pattern space. Finally, as a GNU 'sed' + extension, you can include a special sequence made of a backslash and +-one of the letters `L', `l', `U', `u', or `E'. The meaning is as ++one of the letters 'L', 'l', 'U', 'u', or 'E'. The meaning is as + follows: + +-`\L' +- Turn the replacement to lowercase until a `\U' or `\E' is found, ++'\L' ++ Turn the replacement to lowercase until a '\U' or '\E' is found, + +-`\l' ++'\l' + Turn the next character to lowercase, + +-`\U' +- Turn the replacement to uppercase until a `\L' or `\E' is found, ++'\U' ++ Turn the replacement to uppercase until a '\L' or '\E' is found, + +-`\u' ++'\u' + Turn the next character to uppercase, + +-`\E' +- Stop case conversion started by `\L' or `\U'. ++'\E' ++ Stop case conversion started by '\L' or '\U'. + +- When the `g' flag is being used, case conversion does not propagate ++ When the 'g' flag is being used, case conversion does not propagate + from one occurrence of the regular expression to another. For example, +-when the following command is executed with `a-b-' in pattern space: ++when the following command is executed with 'a-b-' in pattern space: + s/\(b\?\)-/x\u\1/g + +-the output is `axxB'. When replacing the first `-', the `\u' sequence +-only affects the empty replacement of `\1'. It does not affect the `x' +-character that is added to pattern space when replacing `b-' with `xB'. ++the output is 'axxB'. When replacing the first '-', the '\u' sequence ++only affects the empty replacement of '\1'. It does not affect the 'x' ++character that is added to pattern space when replacing 'b-' with 'xB'. + +- On the other hand, `\l' and `\u' do affect the remainder of the ++ On the other hand, '\l' and '\u' do affect the remainder of the + replacement text if they are followed by an empty substitution. With +-`a-b-' in pattern space, the following command: ++'a-b-' in pattern space, the following command: + s/\(b\?\)-/\u\1x/g + +-will replace `-' with `X' (uppercase) and `b-' with `Bx'. If this +-behavior is undesirable, you can prevent it by adding a `\E' +-sequence--after `\1' in this case. ++will replace '-' with 'X' (uppercase) and 'b-' with 'Bx'. If this ++behavior is undesirable, you can prevent it by adding a '\E' ++sequence--after '\1' in this case. + +- To include a literal `\', `&', or newline in the final replacement, +-be sure to precede the desired `\', `&', or newline in the REPLACEMENT +-with a `\'. ++ To include a literal '\', '&', or newline in the final replacement, ++be sure to precede the desired '\', '&', or newline in the REPLACEMENT ++with a '\'. + +- The `s' command can be followed by zero or more of the following ++ The 's' command can be followed by zero or more of the following + FLAGS: + +-`g' ++'g' + Apply the replacement to _all_ matches to the REGEXP, not just the + first. + +-`NUMBER' ++'NUMBER' + Only replace the NUMBERth match of the REGEXP. + + Note: the POSIX standard does not specify what should happen when +- you mix the `g' and NUMBER modifiers, and currently there is no +- widely agreed upon meaning across `sed' implementations. For GNU +- `sed', the interaction is defined to be: ignore matches before the ++ you mix the 'g' and NUMBER modifiers, and currently there is no ++ widely agreed upon meaning across 'sed' implementations. For GNU ++ 'sed', the interaction is defined to be: ignore matches before the + NUMBERth, and then match and replace all matches from the NUMBERth + on. + +-`p' ++'p' + If the substitution was made, then print the new pattern space. + +- Note: when both the `p' and `e' options are specified, the +- relative ordering of the two produces very different results. In +- general, `ep' (evaluate then print) is what you want, but +- operating the other way round can be useful for debugging. For +- this reason, the current version of GNU `sed' interprets specially +- the presence of `p' options both before and after `e', printing +- the pattern space before and after evaluation, while in general +- flags for the `s' command show their effect just once. This +- behavior, although documented, might change in future versions. +- +-`w FILE-NAME' ++ Note: when both the 'p' and 'e' options are specified, the relative ++ ordering of the two produces very different results. In general, ++ 'ep' (evaluate then print) is what you want, but operating the ++ other way round can be useful for debugging. For this reason, the ++ current version of GNU 'sed' interprets specially the presence of ++ 'p' options both before and after 'e', printing the pattern space ++ before and after evaluation, while in general flags for the 's' ++ command show their effect just once. This behavior, although ++ documented, might change in future versions. ++ ++'w FILE-NAME' + If the substitution was made, then write out the result to the +- named file. As a GNU `sed' extension, two special values of +- FILE-NAME are supported: `/dev/stderr', which writes the result to +- the standard error, and `/dev/stdout', which writes to the standard ++ named file. As a GNU 'sed' extension, two special values of ++ FILE-NAME are supported: '/dev/stderr', which writes the result to ++ the standard error, and '/dev/stdout', which writes to the standard + output.(1) + +-`e' ++'e' + This command allows one to pipe input from a shell command into + pattern space. If a substitution was made, the command that is + found in pattern space is executed and pattern space is replaced + with its output. A trailing newline is suppressed; results are + undefined if the command to be executed contains a NUL character. +- This is a GNU `sed' extension. +- +-`I' +-`i' +- The `I' modifier to regular-expression matching is a GNU extension +- which makes `sed' match REGEXP in a case-insensitive manner. +- +-`M' +-`m' +- The `M' modifier to regular-expression matching is a GNU `sed' +- extension which directs GNU `sed' to match the regular expression +- in `multi-line' mode. The modifier causes `^' and `$' to match ++ This is a GNU 'sed' extension. ++ ++'I' ++'i' ++ The 'I' modifier to regular-expression matching is a GNU extension ++ which makes 'sed' match REGEXP in a case-insensitive manner. ++ ++'M' ++'m' ++ The 'M' modifier to regular-expression matching is a GNU 'sed' ++ extension which directs GNU 'sed' to match the regular expression ++ in 'multi-line' mode. The modifier causes '^' and '$' to match + respectively (in addition to the normal behavior) the empty string + after a newline, and the empty string before a newline. There are +- special character sequences (`\`' and `\'') which always match the ++ special character sequences ('\`' and '\'') which always match the + beginning or the end of the buffer. In addition, the period + character does not match a new-line character in multi-line mode. + +- + ---------- Footnotes ---------- + +- (1) This is equivalent to `p' unless the `-i' option is being used. ++ (1) This is equivalent to 'p' unless the '-i' option is being used. + + + File: sed.info, Node: Other Commands, Next: Programming Commands, Prev: The "s" Command, Up: sed Programs +@@ -848,75 +842,75 @@ File: sed.info, Node: Other Commands, Next: Programming Commands, Prev: The " + ================================= + + Though perhaps less frequently used than those in the previous section, +-some very small yet useful `sed' scripts can be built with these ++some very small yet useful 'sed' scripts can be built with these + commands. + +-`y/SOURCE-CHARS/DEST-CHARS/' +- (The `/' characters may be uniformly replaced by any other single +- character within any given `y' command.) ++'y/SOURCE-CHARS/DEST-CHARS/' ++ (The '/' characters may be uniformly replaced by any other single ++ character within any given 'y' command.) + + Transliterate any characters in the pattern space which match any + of the SOURCE-CHARS with the corresponding character in DEST-CHARS. + +- Instances of the `/' (or whatever other character is used in its +- stead), `\', or newlines can appear in the SOURCE-CHARS or +- DEST-CHARS lists, provide that each instance is escaped by a `\'. ++ Instances of the '/' (or whatever other character is used in its ++ stead), '\', or newlines can appear in the SOURCE-CHARS or ++ DEST-CHARS lists, provide that each instance is escaped by a '\'. + The SOURCE-CHARS and DEST-CHARS lists _must_ contain the same + number of characters (after de-escaping). + +-`a\' +-`TEXT' ++'a\' ++'TEXT' + As a GNU extension, this command accepts two addresses. + + Queue the lines of text which follow this command (each but the +- last ending with a `\', which are removed from the output) to be +- output at the end of the current cycle, or when the next input +- line is read. ++ last ending with a '\', which are removed from the output) to be ++ output at the end of the current cycle, or when the next input line ++ is read. + +- Escape sequences in TEXT are processed, so you should use `\\' in ++ Escape sequences in TEXT are processed, so you should use '\\' in + TEXT to print a single backslash. + +- As a GNU extension, if between the `a' and the newline there is +- other than a whitespace-`\' sequence, then the text of this line, +- starting at the first non-whitespace character after the `a', is ++ As a GNU extension, if between the 'a' and the newline there is ++ other than a whitespace-'\' sequence, then the text of this line, ++ starting at the first non-whitespace character after the 'a', is + taken as the first line of the TEXT block. (This enables a + simplification in scripting a one-line add.) This extension also +- works with the `i' and `c' commands. ++ works with the 'i' and 'c' commands. + +-`i\' +-`TEXT' ++'i\' ++'TEXT' + As a GNU extension, this command accepts two addresses. + + Immediately output the lines of text which follow this command +- (each but the last ending with a `\', which are removed from the ++ (each but the last ending with a '\', which are removed from the + output). + +-`c\' +-`TEXT' ++'c\' ++'TEXT' + Delete the lines matching the address or address-range, and output + the lines of text which follow this command (each but the last +- ending with a `\', which are removed from the output) in place of ++ ending with a '\', which are removed from the output) in place of + the last line (or in place of each line, if no addresses were + specified). A new cycle is started after this command is done, + since the pattern space will have been deleted. + +-`=' ++'=' + As a GNU extension, this command accepts two addresses. + + Print out the current input line number (with a trailing newline). + +-`l N' ++'l N' + Print the pattern space in an unambiguous form: non-printable +- characters (and the `\' character) are printed in C-style escaped +- form; long lines are split, with a trailing `\' character to +- indicate the split; the end of each line is marked with a `$'. ++ characters (and the '\' character) are printed in C-style escaped ++ form; long lines are split, with a trailing '\' character to ++ indicate the split; the end of each line is marked with a '$'. + + N specifies the desired line-wrap length; a length of 0 (zero) + means to never wrap long lines. If omitted, the default as + specified on the command line is used. The N parameter is a GNU +- `sed' extension. ++ 'sed' extension. + +-`r FILENAME' ++'r FILENAME' + As a GNU extension, this command accepts two addresses. + + Queue the contents of FILENAME to be read and inserted into the +@@ -924,136 +918,134 @@ commands. + input line is read. Note that if FILENAME cannot be read, it is + treated as if it were an empty file, without any error indication. + +- As a GNU `sed' extension, the special value `/dev/stdin' is ++ As a GNU 'sed' extension, the special value '/dev/stdin' is + supported for the file name, which reads the contents of the + standard input. + +-`w FILENAME' +- Write the pattern space to FILENAME. As a GNU `sed' extension, +- two special values of FILE-NAME are supported: `/dev/stderr', +- which writes the result to the standard error, and `/dev/stdout', +- which writes to the standard output.(1) ++'w FILENAME' ++ Write the pattern space to FILENAME. As a GNU 'sed' extension, two ++ special values of FILE-NAME are supported: '/dev/stderr', which ++ writes the result to the standard error, and '/dev/stdout', which ++ writes to the standard output.(1) + +- The file will be created (or truncated) before the first input +- line is read; all `w' commands (including instances of the `w' flag +- on successful `s' commands) which refer to the same FILENAME are ++ The file will be created (or truncated) before the first input line ++ is read; all 'w' commands (including instances of the 'w' flag on ++ successful 's' commands) which refer to the same FILENAME are + output without closing and reopening the file. + +-`D' ++'D' + If pattern space contains no newline, start a normal new cycle as +- if the `d' command was issued. Otherwise, delete text in the ++ if the 'd' command was issued. Otherwise, delete text in the + pattern space up to the first newline, and restart cycle with the + resultant pattern space, without reading a new line of input. + +-`N' ++'N' + Add a newline to the pattern space, then append the next line of +- input to the pattern space. If there is no more input then `sed' ++ input to the pattern space. If there is no more input then 'sed' + exits without processing any more commands. + +-`P' ++'P' + Print out the portion of the pattern space up to the first newline. + +-`h' ++'h' + Replace the contents of the hold space with the contents of the + pattern space. + +-`H' +- Append a newline to the contents of the hold space, and then +- append the contents of the pattern space to that of the hold space. ++'H' ++ Append a newline to the contents of the hold space, and then append ++ the contents of the pattern space to that of the hold space. + +-`g' ++'g' + Replace the contents of the pattern space with the contents of the + hold space. + +-`G' ++'G' + Append a newline to the contents of the pattern space, and then + append the contents of the hold space to that of the pattern space. + +-`x' ++'x' + Exchange the contents of the hold and pattern spaces. + +- + ---------- Footnotes ---------- + +- (1) This is equivalent to `p' unless the `-i' option is being used. ++ (1) This is equivalent to 'p' unless the '-i' option is being used. + + + File: sed.info, Node: Programming Commands, Next: Extended Commands, Prev: Other Commands, Up: sed Programs + +-3.7 Commands for `sed' gurus ++3.7 Commands for 'sed' gurus + ============================ + + In most cases, use of these commands indicates that you are probably +-better off programming in something like `awk' or Perl. But +-occasionally one is committed to sticking with `sed', and these +-commands can enable one to write quite convoluted scripts. ++better off programming in something like 'awk' or Perl. But ++occasionally one is committed to sticking with 'sed', and these commands ++can enable one to write quite convoluted scripts. + +-`: LABEL' ++': LABEL' + [No addresses allowed.] + + Specify the location of LABEL for branch commands. In all other + respects, a no-op. + +-`b LABEL' ++'b LABEL' + Unconditionally branch to LABEL. The LABEL may be omitted, in + which case the next cycle is started. + +-`t LABEL' +- Branch to LABEL only if there has been a successful `s'ubstitution ++'t LABEL' ++ Branch to LABEL only if there has been a successful 's'ubstitution + since the last input line was read or conditional branch was taken. + The LABEL may be omitted, in which case the next cycle is started. + +- + + File: sed.info, Node: Extended Commands, Next: Escapes, Prev: Programming Commands, Up: sed Programs + +-3.8 Commands Specific to GNU `sed' ++3.8 Commands Specific to GNU 'sed' + ================================== + +-These commands are specific to GNU `sed', so you must use them with +-care and only when you are sure that hindering portability is not evil. +-They allow you to check for GNU `sed' extensions or to do tasks that +-are required quite often, yet are unsupported by standard `sed's. ++These commands are specific to GNU 'sed', so you must use them with care ++and only when you are sure that hindering portability is not evil. They ++allow you to check for GNU 'sed' extensions or to do tasks that are ++required quite often, yet are unsupported by standard 'sed's. + +-`e [COMMAND]' ++'e [COMMAND]' + This command allows one to pipe input from a shell command into +- pattern space. Without parameters, the `e' command executes the ++ pattern space. Without parameters, the 'e' command executes the + command that is found in pattern space and replaces the pattern + space with the output; a trailing newline is suppressed. + +- If a parameter is specified, instead, the `e' command interprets +- it as a command and sends its output to the output stream. The ++ If a parameter is specified, instead, the 'e' command interprets it ++ as a command and sends its output to the output stream. The + command can run across multiple lines, all but the last ending with + a back-slash. + + In both cases, the results are undefined if the command to be + executed contains a NUL character. + +- Note that, unlike the `r' command, the output of the command will +- be printed immediately; the `r' command instead delays the output ++ Note that, unlike the 'r' command, the output of the command will ++ be printed immediately; the 'r' command instead delays the output + to the end of the current cycle. + +-`F' ++'F' + Print out the file name of the current input file (with a trailing + newline). + +-`L N' +- This GNU `sed' extension fills and joins lines in pattern space to +- produce output lines of (at most) N characters, like `fmt' does; +- if N is omitted, the default as specified on the command line is +- used. This command is considered a failed experiment and unless +- there is enough request (which seems unlikely) will be removed in +- future versions. ++'L N' ++ This GNU 'sed' extension fills and joins lines in pattern space to ++ produce output lines of (at most) N characters, like 'fmt' does; if ++ N is omitted, the default as specified on the command line is used. ++ This command is considered a failed experiment and unless there is ++ enough request (which seems unlikely) will be removed in future ++ versions. + +-`Q [EXIT-CODE]' ++'Q [EXIT-CODE]' + This command only accepts a single address. + +- This command is the same as `q', but will not print the contents +- of pattern space. Like `q', it provides the ability to return an +- exit code to the caller. ++ This command is the same as 'q', but will not print the contents of ++ pattern space. Like 'q', it provides the ability to return an exit ++ code to the caller. + + This command can be useful because the only alternative ways to +- accomplish this apparently trivial function are to use the `-n' ++ accomplish this apparently trivial function are to use the '-n' + option (which can unnecessarily complicate your script) or + resorting to the following snippet, which wastes time by reading + the whole file without any visible effect: +@@ -1064,46 +1056,45 @@ are required quite often, yet are unsupported by standard `sed's. + g Overwrite pattern space each time to save memory + b eat + +-`R FILENAME' ++'R FILENAME' + Queue a line of FILENAME to be read and inserted into the output +- stream at the end of the current cycle, or when the next input +- line is read. Note that if FILENAME cannot be read, or if its end +- is reached, no line is appended, without any error indication. ++ stream at the end of the current cycle, or when the next input line ++ is read. Note that if FILENAME cannot be read, or if its end is ++ reached, no line is appended, without any error indication. + +- As with the `r' command, the special value `/dev/stdin' is ++ As with the 'r' command, the special value '/dev/stdin' is + supported for the file name, which reads a line from the standard + input. + +-`T LABEL' ++'T LABEL' + Branch to LABEL only if there have been no successful +- `s'ubstitutions since the last input line was read or conditional +- branch was taken. The LABEL may be omitted, in which case the next ++ 's'ubstitutions since the last input line was read or conditional ++ branch was taken. The LABEL may be omitted, in which case the next + cycle is started. + +-`v VERSION' +- This command does nothing, but makes `sed' fail if GNU `sed' ++'v VERSION' ++ This command does nothing, but makes 'sed' fail if GNU 'sed' + extensions are not supported, simply because other versions of +- `sed' do not implement it. In addition, you can specify the +- version of `sed' that your script requires, such as `4.0.5'. The +- default is `4.0' because that is the first version that +- implemented this command. ++ 'sed' do not implement it. In addition, you can specify the ++ version of 'sed' that your script requires, such as '4.0.5'. The ++ default is '4.0' because that is the first version that implemented ++ this command. + +- This command enables all GNU extensions even if `POSIXLY_CORRECT' ++ This command enables all GNU extensions even if 'POSIXLY_CORRECT' + is set in the environment. + +-`W FILENAME' ++'W FILENAME' + Write to the given filename the portion of the pattern space up to +- the first newline. Everything said under the `w' command about ++ the first newline. Everything said under the 'w' command about + file handling holds here too. + +-`z' ++'z' + This command empties the content of pattern space. It is usually +- the same as `s/.*//', but is more efficient and works in the +- presence of invalid multibyte sequences in the input stream. +- POSIX mandates that such sequences are _not_ matched by `.', so +- that there is no portable way to clear `sed''s buffers in the +- middle of the script in most multibyte locales (including UTF-8 +- locales). ++ the same as 's/.*//', but is more efficient and works in the ++ presence of invalid multibyte sequences in the input stream. POSIX ++ mandates that such sequences are _not_ matched by '.', so that ++ there is no portable way to clear 'sed''s buffers in the middle of ++ the script in most multibyte locales (including UTF-8 locales). + + + File: sed.info, Node: Escapes, Prev: Extended Commands, Up: sed Programs +@@ -1111,95 +1102,94 @@ File: sed.info, Node: Escapes, Prev: Extended Commands, Up: sed Programs + 3.9 GNU Extensions for Escapes in Regular Expressions + ===================================================== + +-Until this chapter, we have only encountered escapes of the form `\^', +-which tell `sed' not to interpret the circumflex as a special +-character, but rather to take it literally. For example, `\*' matches +-a single asterisk rather than zero or more backslashes. ++Until this chapter, we have only encountered escapes of the form '\^', ++which tell 'sed' not to interpret the circumflex as a special character, ++but rather to take it literally. For example, '\*' matches a single ++asterisk rather than zero or more backslashes. + + This chapter introduces another kind of escape(1)--that is, escapes + that are applied to a character or sequence of characters that +-ordinarily are taken literally, and that `sed' replaces with a special ++ordinarily are taken literally, and that 'sed' replaces with a special + character. This provides a way of encoding non-printable characters in +-patterns in a visible manner. There is no restriction on the +-appearance of non-printing characters in a `sed' script but when a +-script is being prepared in the shell or by text editing, it is usually +-easier to use one of the following escape sequences than the binary +-character it represents: ++patterns in a visible manner. There is no restriction on the appearance ++of non-printing characters in a 'sed' script but when a script is being ++prepared in the shell or by text editing, it is usually easier to use ++one of the following escape sequences than the binary character it ++represents: + + The list of these escapes is: + +-`\a' ++'\a' + Produces or matches a BEL character, that is an "alert" (ASCII 7). + +-`\f' ++'\f' + Produces or matches a form feed (ASCII 12). + +-`\n' ++'\n' + Produces or matches a newline (ASCII 10). + +-`\r' ++'\r' + Produces or matches a carriage return (ASCII 13). + +-`\t' ++'\t' + Produces or matches a horizontal tab (ASCII 9). + +-`\v' ++'\v' + Produces or matches a so called "vertical tab" (ASCII 11). + +-`\cX' +- Produces or matches `CONTROL-X', where X is any character. The +- precise effect of `\cX' is as follows: if X is a lower case +- letter, it is converted to upper case. Then bit 6 of the +- character (hex 40) is inverted. Thus `\cz' becomes hex 1A, but +- `\c{' becomes hex 3B, while `\c;' becomes hex 7B. ++'\cX' ++ Produces or matches 'CONTROL-X', where X is any character. The ++ precise effect of '\cX' is as follows: if X is a lower case letter, ++ it is converted to upper case. Then bit 6 of the character (hex ++ 40) is inverted. Thus '\cz' becomes hex 1A, but '\c{' becomes hex ++ 3B, while '\c;' becomes hex 7B. + +-`\dXXX' ++'\dXXX' + Produces or matches a character whose decimal ASCII value is XXX. + +-`\oXXX' ++'\oXXX' + Produces or matches a character whose octal ASCII value is XXX. + +-`\xXX' ++'\xXX' + Produces or matches a character whose hexadecimal ASCII value is + XX. + +- `\b' (backspace) was omitted because of the conflict with the ++ '\b' (backspace) was omitted because of the conflict with the + existing "word boundary" meaning. + + Other escapes match a particular character class and are valid only + in regular expressions: + +-`\w' ++'\w' + Matches any "word" character. A "word" character is any letter or + digit or the underscore character. + +-`\W' ++'\W' + Matches any "non-word" character. + +-`\b' +- Matches a word boundary; that is it matches if the character to +- the left is a "word" character and the character to the right is a ++'\b' ++ Matches a word boundary; that is it matches if the character to the ++ left is a "word" character and the character to the right is a + "non-word" character, or vice-versa. + +-`\B' ++'\B' + Matches everywhere but on a word boundary; that is it matches if +- the character to the left and the character to the right are +- either both "word" characters or both "non-word" characters. ++ the character to the left and the character to the right are either ++ both "word" characters or both "non-word" characters. + +-`\`' +- Matches only at the start of pattern space. This is different +- from `^' in multi-line mode. ++'\`' ++ Matches only at the start of pattern space. This is different from ++ '^' in multi-line mode. + +-`\'' ++'\'' + Matches only at the end of pattern space. This is different from +- `$' in multi-line mode. +- ++ '$' in multi-line mode. + + ---------- Footnotes ---------- + + (1) All the escapes introduced here are GNU extensions, with the +-exception of `\n'. In basic regular expression mode, setting +-`POSIXLY_CORRECT' disables them inside bracket expressions. ++exception of '\n'. In basic regular expression mode, setting ++'POSIXLY_CORRECT' disables them inside bracket expressions. + + + File: sed.info, Node: Examples, Next: Limitations, Prev: sed Programs, Up: Top +@@ -1207,7 +1197,7 @@ File: sed.info, Node: Examples, Next: Limitations, Prev: sed Programs, Up: T + 4 Some Sample Scripts + ********************* + +-Here are some `sed' scripts to guide you in the art of mastering `sed'. ++Here are some 'sed' scripts to guide you in the art of mastering 'sed'. + + * Menu: + +@@ -1239,7 +1229,7 @@ File: sed.info, Node: Centering lines, Next: Increment a number, Up: Examples + =================== + + This script centers all lines of a file on a 80 columns width. To +-change that width, the number in `\{...\}' must be replaced, and the ++change that width, the number in '\{...\}' must be replaced, and the + number of added spaces also must be changed. + + Note how the buffer commands are used to separate parts in the +@@ -1276,19 +1266,19 @@ File: sed.info, Node: Increment a number, Next: Rename files to lower case, P + ====================== + + This script is one of a few that demonstrate how to do arithmetic in +-`sed'. This is indeed possible,(1) but must be done manually. ++'sed'. This is indeed possible,(1) but must be done manually. + +- To increment one number you just add 1 to last digit, replacing it +-by the following digit. There is one exception: when the digit is a +-nine the previous digits must be also incremented until you don't have +-a nine. ++ To increment one number you just add 1 to last digit, replacing it by ++the following digit. There is one exception: when the digit is a nine ++the previous digits must be also incremented until you don't have a ++nine. + + This solution by Bruno Haible is very clever and smart because it + uses a single buffer; if you don't have this limitation, the algorithm +-used in *note Numbering lines: cat -n, is faster. It works by +-replacing trailing nines with an underscore, then using multiple `s' +-commands to increment the last digit, and then again substituting +-underscores with zeros. ++used in *note Numbering lines: cat -n, is faster. It works by replacing ++trailing nines with an underscore, then using multiple 's' commands to ++increment the last digit, and then again substituting underscores with ++zeros. + + #!/usr/bin/sed -f + +@@ -1319,7 +1309,7 @@ underscores with zeros. + + ---------- Footnotes ---------- + +- (1) `sed' guru Greg Ubben wrote an implementation of the `dc' RPN ++ (1) 'sed' guru Greg Ubben wrote an implementation of the 'dc' RPN + calculator! It is distributed together with sed. + + +@@ -1328,15 +1318,15 @@ File: sed.info, Node: Rename files to lower case, Next: Print bash environment + 4.3 Rename Files to Lower Case + ============================== + +-This is a pretty strange use of `sed'. We transform text, and +-transform it to be shell commands, then just feed them to shell. Don't +-worry, even worse hacks are done when using `sed'; I have seen a script +-converting the output of `date' into a `bc' program! ++This is a pretty strange use of 'sed'. We transform text, and transform ++it to be shell commands, then just feed them to shell. Don't worry, ++even worse hacks are done when using 'sed'; I have seen a script ++converting the output of 'date' into a 'bc' program! + +- The main body of this is the `sed' script, which remaps the name +-from lower to upper (or vice-versa) and even checks out if the remapped +-name is the same as the original name. Note how the script is +-parameterized using shell variables and proper quoting. ++ The main body of this is the 'sed' script, which remaps the name from ++lower to upper (or vice-versa) and even checks out if the remapped name ++is the same as the original name. Note how the script is parameterized ++using shell variables and proper quoting. + + #! /bin/sh + # rename files to lower/upper case... +@@ -1437,11 +1427,11 @@ parameterized using shell variables and proper quoting. + + File: sed.info, Node: Print bash environment, Next: Reverse chars of lines, Prev: Rename files to lower case, Up: Examples + +-4.4 Print `bash' Environment ++4.4 Print 'bash' Environment + ============================ + +-This script strips the definition of the shell functions from the +-output of the `set' Bourne-shell command. ++This script strips the definition of the shell functions from the output ++of the 'set' Bourne-shell command. + + #!/bin/sh + +@@ -1478,11 +1468,11 @@ This script can be used to reverse the position of characters in lines. + The technique moves two characters at a time, hence it is faster than + more intuitive implementations. + +- Note the `tx' command before the definition of the label. This is +-often needed to reset the flag that is tested by the `t' command. ++ Note the 'tx' command before the definition of the label. This is ++often needed to reset the flag that is tested by the 't' command. + + Imaginative readers will find uses for this script. An example is +-reversing the output of `banner'.(1) ++reversing the output of 'banner'.(1) + + #!/usr/bin/sed -f + +@@ -1521,10 +1511,10 @@ File: sed.info, Node: tac, Next: cat -n, Prev: Reverse chars of lines, Up: E + ========================== + + This one begins a series of totally useless (yet interesting) scripts +-emulating various Unix commands. This, in particular, is a `tac' ++emulating various Unix commands. This, in particular, is a 'tac' + workalike. + +- Note that on implementations other than GNU `sed' this script might ++ Note that on implementations other than GNU 'sed' this script might + easily overflow internal buffers. + + #!/usr/bin/sed -nf +@@ -1547,13 +1537,13 @@ File: sed.info, Node: cat -n, Next: cat -b, Prev: tac, Up: Examples + 4.7 Numbering Lines + =================== + +-This script replaces `cat -n'; in fact it formats its output exactly +-like GNU `cat' does. ++This script replaces 'cat -n'; in fact it formats its output exactly ++like GNU 'cat' does. + +- Of course this is completely useless and for two reasons: first, ++ Of course this is completely useless and for two reasons: first, + because somebody else did it in C, second, because the following +-Bourne-shell script could be used for the same purpose and would be +-much faster: ++Bourne-shell script could be used for the same purpose and would be much ++faster: + + #! /bin/sh + sed -e "=" $@ | sed -e ' +@@ -1562,16 +1552,16 @@ much faster: + s/^ *\(......\)\n/\1 / + ' + +- It uses `sed' to print the line number, then groups lines two by two +-using `N'. Of course, this script does not teach as much as the one ++ It uses 'sed' to print the line number, then groups lines two by two ++using 'N'. Of course, this script does not teach as much as the one + presented below. + +- The algorithm used for incrementing uses both buffers, so the line +-is printed as soon as possible and then discarded. The number is split +-so that changing digits go in a buffer and unchanged ones go in the +-other; the changed digits are modified in a single step (using a `y' +-command). The line number for the next line is then composed and +-stored in the hold space, to be used in the next iteration. ++ The algorithm used for incrementing uses both buffers, so the line is ++printed as soon as possible and then discarded. The number is split so ++that changing digits go in a buffer and unchanged ones go in the other; ++the changed digits are modified in a single step (using a 'y' command). ++The line number for the next line is then composed and stored in the ++hold space, to be used in the next iteration. + + #!/usr/bin/sed -nf + +@@ -1616,11 +1606,11 @@ File: sed.info, Node: cat -b, Next: wc -c, Prev: cat -n, Up: Examples + 4.8 Numbering Non-blank Lines + ============================= + +-Emulating `cat -b' is almost the same as `cat -n'--we only have to ++Emulating 'cat -b' is almost the same as 'cat -n'--we only have to + select which lines are to be numbered and which are not. + + The part that is common to this script and the previous one is not +-commented to show how important it is to comment `sed' scripts ++commented to show how important it is to comment 'sed' scripts + properly... + + #!/usr/bin/sed -nf +@@ -1656,13 +1646,13 @@ File: sed.info, Node: wc -c, Next: wc -w, Prev: cat -b, Up: Examples + 4.9 Counting Characters + ======================= + +-This script shows another way to do arithmetic with `sed'. In this +-case we have to add possibly large numbers, so implementing this by ++This script shows another way to do arithmetic with 'sed'. In this case ++we have to add possibly large numbers, so implementing this by + successive increments would not be feasible (and possibly even more + complicated to contrive than this script). + + The approach is to map numbers to letters, kind of an abacus +-implemented with `sed'. `a's are units, `b's are tens and so on: we ++implemented with 'sed'. 'a's are units, 'b's are tens and so on: we + simply add the number of characters on the current line as units, and + then propagate the carry to tens, hundreds, and so on. + +@@ -1670,9 +1660,9 @@ then propagate the carry to tens, hundreds, and so on. + + On the last line, we convert the abacus form back to decimal. For + the sake of variety, this is done with a loop rather than with some 80 +-`s' commands(1): first we convert units, removing `a's from the number; +-then we rotate letters so that tens become `a's, and so on until no +-more letters remain. ++'s' commands(1): first we convert units, removing 'a's from the number; ++then we rotate letters so that tens become 'a's, and so on until no more ++letters remain. + + #!/usr/bin/sed -nf + +@@ -1730,17 +1720,16 @@ File: sed.info, Node: wc -w, Next: wc -l, Prev: wc -c, Up: Examples + =================== + + This script is almost the same as the previous one, once each of the +-words on the line is converted to a single `a' (in the previous script +-each letter was changed to an `a'). ++words on the line is converted to a single 'a' (in the previous script ++each letter was changed to an 'a'). + +- It is interesting that real `wc' programs have optimized loops for +-`wc -c', so they are much slower at counting words rather than +-characters. This script's bottleneck, instead, is arithmetic, and +-hence the word-counting one is faster (it has to manage smaller +-numbers). ++ It is interesting that real 'wc' programs have optimized loops for ++'wc -c', so they are much slower at counting words rather than ++characters. This script's bottleneck, instead, is arithmetic, and hence ++the word-counting one is faster (it has to manage smaller numbers). + + Again, the common parts are not commented to show the importance of +-commenting `sed' scripts. ++commenting 'sed' scripts. + + #!/usr/bin/sed -nf + +@@ -1787,8 +1776,8 @@ File: sed.info, Node: wc -l, Next: head, Prev: wc -w, Up: Examples + 4.11 Counting Lines + =================== + +-No strange things are done now, because `sed' gives us `wc -l' +-functionality for free!!! Look: ++No strange things are done now, because 'sed' gives us 'wc -l' ++functionality for free!!! Look: + + #!/usr/bin/sed -nf + $= +@@ -1799,9 +1788,9 @@ File: sed.info, Node: head, Next: tail, Prev: wc -l, Up: Examples + 4.12 Printing the First Lines + ============================= + +-This script is probably the simplest useful `sed' script. It displays ++This script is probably the simplest useful 'sed' script. It displays + the first 10 lines of input; the number of displayed lines is right +-before the `q' command. ++before the 'q' command. + + #!/usr/bin/sed -f + 10q +@@ -1816,8 +1805,8 @@ Printing the last N lines rather than the first is more complex but + indeed possible. N is encoded in the second line, before the bang + character. + +- This script is similar to the `tac' script in that it keeps the +-final output in the hold space and prints it at the end: ++ This script is similar to the 'tac' script in that it keeps the final ++output in the hold space and prints it at the end: + + #!/usr/bin/sed -nf + +@@ -1828,20 +1817,20 @@ final output in the hold space and prints it at the end: + + Mainly, the scripts keeps a window of 10 lines and slides it by + adding a line and deleting the oldest (the substitution command on the +-second line works like a `D' command but does not restart the loop). ++second line works like a 'D' command but does not restart the loop). + + The "sliding window" technique is a very powerful way to write +-efficient and complex `sed' scripts, because commands like `P' would ++efficient and complex 'sed' scripts, because commands like 'P' would + require a lot of work if implemented manually. + + To introduce the technique, which is fully demonstrated in the rest +-of this chapter and is based on the `N', `P' and `D' commands, here is +-an implementation of `tail' using a simple "sliding window." ++of this chapter and is based on the 'N', 'P' and 'D' commands, here is ++an implementation of 'tail' using a simple "sliding window." + + This looks complicated but in fact the working is the same as the + last script: after we have kicked in the appropriate number of lines, + however, we stop using the hold space to keep inter-line state, and +-instead use `N' and `D' to slide pattern space by one line: ++instead use 'N' and 'D' to slide pattern space by one line: + + #!/usr/bin/sed -f + +@@ -1863,7 +1852,7 @@ File: sed.info, Node: uniq, Next: uniq -d, Prev: tail, Up: Examples + 4.14 Make Duplicate Lines Unique + ================================ + +-This is an example of the art of using the `N', `P' and `D' commands, ++This is an example of the art of using the 'N', 'P' and 'D' commands, + probably the most difficult to master. + + #!/usr/bin/sed -f +@@ -1880,7 +1869,7 @@ probably the most difficult to master. + bb + } + +- # If the `N' command had added the last line, print and exit ++ # If the N command had added the last line, print and exit + $b + + # The lines are different; print the first and go +@@ -1888,8 +1877,8 @@ probably the most difficult to master. + P + D + +- As you can see, we mantain a 2-line window using `P' and `D'. This +-technique is often used in advanced `sed' scripts. ++ As you can see, we mantain a 2-line window using 'P' and 'D'. This ++technique is often used in advanced 'sed' scripts. + + + File: sed.info, Node: uniq -d, Next: uniq -u, Prev: uniq, Up: Examples +@@ -1897,7 +1886,7 @@ File: sed.info, Node: uniq -d, Next: uniq -u, Prev: uniq, Up: Examples + 4.15 Print Duplicated Lines of Input + ==================================== + +-This script prints only duplicated lines, like `uniq -d'. ++This script prints only duplicated lines, like 'uniq -d'. + + #!/usr/bin/sed -nf + +@@ -1931,7 +1920,7 @@ File: sed.info, Node: uniq -u, Next: cat -s, Prev: uniq -d, Up: Examples + 4.16 Remove All Duplicated Lines + ================================ + +-This script prints only unique lines, like `uniq -u'. ++This script prints only unique lines, like 'uniq -u'. + + #!/usr/bin/sed -f + +@@ -1948,7 +1937,7 @@ This script prints only unique lines, like `uniq -u'. + # end of the file we simply exit + $d + +- # Else, we keep reading lines with `N' until we ++ # Else, we keep reading lines with N until we + # find a different one + s/.*\n// + N +@@ -1966,9 +1955,9 @@ File: sed.info, Node: cat -s, Prev: uniq -u, Up: Examples + 4.17 Squeezing Blank Lines + ========================== + +-As a final example, here are three scripts, of increasing complexity +-and speed, that implement the same function as `cat -s', that is +-squeezing blank lines. ++As a final example, here are three scripts, of increasing complexity and ++speed, that implement the same function as 'cat -s', that is squeezing ++blank lines. + + The first leaves a blank line at the beginning and end if there are + some already. +@@ -2008,9 +1997,9 @@ beginning. It does leave a single blank line at end if one was there. + } + + This removes leading and trailing blank lines. It is also the +-fastest. Note that loops are completely done with `n' and `b', without +-relying on `sed' to restart the the script automatically at the end of +-a line. ++fastest. Note that loops are completely done with 'n' and 'b', without ++relying on 'sed' to restart the the script automatically at the end of a ++line. + + #!/usr/bin/sed -nf + +@@ -2044,15 +2033,15 @@ a line. + + File: sed.info, Node: Limitations, Next: Other Resources, Prev: Examples, Up: Top + +-5 GNU `sed''s Limitations and Non-limitations ++5 GNU 'sed''s Limitations and Non-limitations + ********************************************* + +-For those who want to write portable `sed' scripts, be aware that some ++For those who want to write portable 'sed' scripts, be aware that some + implementations have been known to limit line lengths (for the pattern + and hold spaces) to be no more than 4000 bytes. The POSIX standard +-specifies that conforming `sed' implementations shall support at least +-8192 byte line lengths. GNU `sed' has no built-in limit on line length; +-as long as it can `malloc()' more (virtual) memory, you can feed or ++specifies that conforming 'sed' implementations shall support at least ++8192 byte line lengths. GNU 'sed' has no built-in limit on line length; ++as long as it can 'malloc()' more (virtual) memory, you can feed or + construct lines as long as you like. + + However, recursion is used to handle subpatterns and indefinite +@@ -2062,23 +2051,23 @@ size of the buffer that can be processed by certain patterns. + + File: sed.info, Node: Other Resources, Next: Reporting Bugs, Prev: Limitations, Up: Top + +-6 Other Resources for Learning About `sed' ++6 Other Resources for Learning About 'sed' + ****************************************** + +-In addition to several books that have been written about `sed' (either ++In addition to several books that have been written about 'sed' (either + specifically or as chapters in books which discuss shell programming), +-one can find out more about `sed' (including suggestions of a few +-books) from the FAQ for the `sed-users' mailing list, available from: +- `http://sed.sourceforge.net/sedfaq.html' ++one can find out more about 'sed' (including suggestions of a few books) ++from the FAQ for the 'sed-users' mailing list, available from: ++ <http://sed.sourceforge.net/sedfaq.html> + + Also of interest are +-`http://www.student.northpark.edu/pemente/sed/index.htm' and +-`http://sed.sf.net/grabbag', which include `sed' tutorials and other +-`sed'-related goodies. ++<http://www.student.northpark.edu/pemente/sed/index.htm> and ++<http://sed.sf.net/grabbag>, which include 'sed' tutorials and other ++'sed'-related goodies. + +- The `sed-users' mailing list itself maintained by Sven Guckes. To +-subscribe, visit `http://groups.yahoo.com' and search for the +-`sed-users' mailing list. ++ The 'sed-users' mailing list itself maintained by Sven Guckes. To ++subscribe, visit <http://groups.yahoo.com> and search for the ++'sed-users' mailing list. + + + File: sed.info, Node: Reporting Bugs, Next: Extended regexps, Prev: Other Resources, Up: Top +@@ -2086,140 +2075,145 @@ File: sed.info, Node: Reporting Bugs, Next: Extended regexps, Prev: Other Res + 7 Reporting Bugs + **************** + +-Email bug reports to <bug-sed@gnu.org>. Also, please include the +-output of `sed --version' in the body of your report if at all possible. ++Email bug reports to <bug-sed@gnu.org>. Also, please include the output ++of 'sed --version' in the body of your report if at all possible. + + Please do not send a bug report like this: + + while building frobme-1.3.4 + $ configure +- error--> sed: file sedscr line 1: Unknown option to 's' ++ error-> sed: file sedscr line 1: Unknown option to 's' + +- If GNU `sed' doesn't configure your favorite package, take a few ++ If GNU 'sed' doesn't configure your favorite package, take a few + extra minutes to identify the specific problem and make a stand-alone + test case. Unlike other programs such as C compilers, making such test +-cases for `sed' is quite simple. ++cases for 'sed' is quite simple. + + A stand-alone test case includes all the data necessary to perform +-the test, and the specific invocation of `sed' that causes the problem. ++the test, and the specific invocation of 'sed' that causes the problem. + The smaller a stand-alone test case is, the better. A test case should +-not involve something as far removed from `sed' as "try to configure +-frobme-1.3.4". Yes, that is in principle enough information to look +-for the bug, but that is not a very practical prospect. ++not involve something as far removed from 'sed' as "try to configure ++frobme-1.3.4". Yes, that is in principle enough information to look for ++the bug, but that is not a very practical prospect. + + Here are a few commonly reported bugs that are not bugs. + +-`N' command on the last line +- Most versions of `sed' exit without printing anything when the `N' +- command is issued on the last line of a file. GNU `sed' prints +- pattern space before exiting unless of course the `-n' command ++'N' command on the last line ++ ++ Most versions of 'sed' exit without printing anything when the 'N' ++ command is issued on the last line of a file. GNU 'sed' prints ++ pattern space before exiting unless of course the '-n' command + switch has been specified. This choice is by design. + + For example, the behavior of + sed N foo bar + would depend on whether foo has an even or an odd number of + lines(1). Or, when writing a script to read the next few lines +- following a pattern match, traditional implementations of `sed' ++ following a pattern match, traditional implementations of 'sed' + would force you to write something like + /foo/{ $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N } + instead of just + /foo/{ N;N;N;N;N;N;N;N;N; } + +- In any case, the simplest workaround is to use `$d;N' in scripts ++ In any case, the simplest workaround is to use '$d;N' in scripts + that rely on the traditional behavior, or to set the +- `POSIXLY_CORRECT' variable to a non-empty value. ++ 'POSIXLY_CORRECT' variable to a non-empty value. + + Regex syntax clashes (problems with backslashes) +- `sed' uses the POSIX basic regular expression syntax. According to ++ 'sed' uses the POSIX basic regular expression syntax. According to + the standard, the meaning of some escape sequences is undefined in +- this syntax; notable in the case of `sed' are `\|', `\+', `\?', +- `\`', `\'', `\<', `\>', `\b', `\B', `\w', and `\W'. ++ this syntax; notable in the case of 'sed' are '\|', '\+', '\?', ++ '\`', '\'', '\<', '\>', '\b', '\B', '\w', and '\W'. + + As in all GNU programs that use POSIX basic regular expressions, +- `sed' interprets these escape sequences as special characters. +- So, `x\+' matches one or more occurrences of `x'. `abc\|def' +- matches either `abc' or `def'. ++ 'sed' interprets these escape sequences as special characters. So, ++ 'x\+' matches one or more occurrences of 'x'. 'abc\|def' matches ++ either 'abc' or 'def'. + + This syntax may cause problems when running scripts written for +- other `sed's. Some `sed' programs have been written with the +- assumption that `\|' and `\+' match the literal characters `|' and +- `+'. Such scripts must be modified by removing the spurious ++ other 'sed's. Some 'sed' programs have been written with the ++ assumption that '\|' and '\+' match the literal characters '|' and ++ '+'. Such scripts must be modified by removing the spurious + backslashes if they are to be used with modern implementations of +- `sed', like GNU `sed'. ++ 'sed', like GNU 'sed'. + + On the other hand, some scripts use s|abc\|def||g to remove +- occurrences of _either_ `abc' or `def'. While this worked until +- `sed' 4.0.x, newer versions interpret this as removing the string +- `abc|def'. This is again undefined behavior according to POSIX, +- and this interpretation is arguably more robust: older `sed's, for +- example, required that the regex matcher parsed `\/' as `/' in the +- common case of escaping a slash, which is again undefined +- behavior; the new behavior avoids this, and this is good because +- the regex matcher is only partially under our control. +- +- In addition, this version of `sed' supports several escape ++ occurrences of _either_ 'abc' or 'def'. While this worked until ++ 'sed' 4.0.x, newer versions interpret this as removing the string ++ 'abc|def'. This is again undefined behavior according to POSIX, ++ and this interpretation is arguably more robust: older 'sed's, for ++ example, required that the regex matcher parsed '\/' as '/' in the ++ common case of escaping a slash, which is again undefined behavior; ++ the new behavior avoids this, and this is good because the regex ++ matcher is only partially under our control. ++ ++ In addition, this version of 'sed' supports several escape + characters (some of which are multi-character) to insert +- non-printable characters in scripts (`\a', `\c', `\d', `\o', `\r', +- `\t', `\v', `\x'). These can cause similar problems with scripts +- written for other `sed's. ++ non-printable characters in scripts ('\a', '\c', '\d', '\o', '\r', ++ '\t', '\v', '\x'). These can cause similar problems with scripts ++ written for other 'sed's. + +-`-i' clobbers read-only files +- In short, `sed -i' will let you delete the contents of a read-only +- file, and in general the `-i' option (*note Invocation: Invoking ++'-i' clobbers read-only files ++ ++ In short, 'sed -i' will let you delete the contents of a read-only ++ file, and in general the '-i' option (*note Invocation: Invoking + sed.) lets you clobber protected files. This is not a bug, but + rather a consequence of how the Unix filesystem works. + + The permissions on a file say what can happen to the data in that + file, while the permissions on a directory say what can happen to +- the list of files in that directory. `sed -i' will not ever open +- for writing a file that is already on disk. Rather, it will work ++ the list of files in that directory. 'sed -i' will not ever open ++ for writing a file that is already on disk. Rather, it will work + on a temporary file that is finally renamed to the original name: + if you rename or delete files, you're actually modifying the + contents of the directory, so the operation depends on the + permissions of the directory, not of the file. For this same +- reason, `sed' does not let you use `-i' on a writeable file in a ++ reason, 'sed' does not let you use '-i' on a writeable file in a + read-only directory, and will break hard or symbolic links when +- `-i' is used on such a file. ++ '-i' is used on such a file. ++ ++'0a' does not work (gives an error) + +-`0a' does not work (gives an error) + There is no line 0. 0 is a special address that is only used to +- treat addresses like `0,/RE/' as active when the script starts: if +- you write `1,/abc/d' and the first line includes the word `abc', ++ treat addresses like '0,/RE/' as active when the script starts: if ++ you write '1,/abc/d' and the first line includes the word 'abc', + then that match would be ignored because address ranges must span + at least two lines (barring the end of the file); but what you + probably wanted is to delete every line up to the first one +- including `abc', and this is obtained with `0,/abc/d'. ++ including 'abc', and this is obtained with '0,/abc/d'. ++ ++'[a-z]' is case insensitive + +-`[a-z]' is case insensitive + You are encountering problems with locales. POSIX mandates that +- `[a-z]' uses the current locale's collation order - in C parlance, +- that means using `strcoll(3)' instead of `strcmp(3)'. Some +- locales have a case-insensitive collation order, others don't. ++ '[a-z]' uses the current locale's collation order - in C parlance, ++ that means using 'strcoll(3)' instead of 'strcmp(3)'. Some locales ++ have a case-insensitive collation order, others don't. + +- Another problem is that `[a-z]' tries to use collation symbols. ++ Another problem is that '[a-z]' tries to use collation symbols. + This only happens if you are on the GNU system, using GNU libc's + regular expression matcher instead of compiling the one supplied + with GNU sed. In a Danish locale, for example, the regular +- expression `^[a-z]$' matches the string `aa', because this is a +- single collating symbol that comes after `a' and before `b'; `ll' +- behaves similarly in Spanish locales, or `ij' in Dutch locales. ++ expression '^[a-z]$' matches the string 'aa', because this is a ++ single collating symbol that comes after 'a' and before 'b'; 'll' ++ behaves similarly in Spanish locales, or 'ij' in Dutch locales. + + To work around these problems, which may cause bugs in shell +- scripts, set the `LC_COLLATE' and `LC_CTYPE' environment variables +- to `C'. ++ scripts, set the 'LC_COLLATE' and 'LC_CTYPE' environment variables ++ to 'C'. ++ ++'s/.*//' does not clear pattern space + +-`s/.*//' does not clear pattern space + This happens if your input stream includes invalid multibyte +- sequences. POSIX mandates that such sequences are _not_ matched +- by `.', so that `s/.*//' will not clear pattern space as you would ++ sequences. POSIX mandates that such sequences are _not_ matched by ++ '.', so that 's/.*//' will not clear pattern space as you would + expect. In fact, there is no way to clear sed's buffers in the + middle of the script in most multibyte locales (including UTF-8 +- locales). For this reason, GNU `sed' provides a `z' command (for +- `zap') as an extension. ++ locales). For this reason, GNU 'sed' provides a 'z' command (for ++ 'zap') as an extension. + + To work around these problems, which may cause bugs in shell +- scripts, set the `LC_COLLATE' and `LC_CTYPE' environment variables +- to `C'. ++ scripts, set the 'LC_COLLATE' and 'LC_CTYPE' environment variables ++ to 'C'. + + ---------- Footnotes ---------- + +@@ -2232,33 +2226,32 @@ Appendix A Extended regular expressions + *************************************** + + The only difference between basic and extended regular expressions is in +-the behavior of a few characters: `?', `+', parentheses, braces (`{}'), +-and `|'. While basic regular expressions require these to be escaped +-if you want them to behave as special characters, when using extended ++the behavior of a few characters: '?', '+', parentheses, braces ('{}'), ++and '|'. While basic regular expressions require these to be escaped if ++you want them to behave as special characters, when using extended + regular expressions you must escape them if you want them _to match a +-literal character_. `|' is special here because `\|' is a GNU +-extension - standard basic regular expressions do not provide its +-functionality. ++literal character_. '|' is special here because '\|' is a GNU extension ++- standard basic regular expressions do not provide its functionality. + + Examples: +-`abc?' +- becomes `abc\?' when using extended regular expressions. It +- matches the literal string `abc?'. ++'abc?' ++ becomes 'abc\?' when using extended regular expressions. It ++ matches the literal string 'abc?'. + +-`c\+' +- becomes `c+' when using extended regular expressions. It matches +- one or more `c's. ++'c\+' ++ becomes 'c+' when using extended regular expressions. It matches ++ one or more 'c's. + +-`a\{3,\}' +- becomes `a{3,}' when using extended regular expressions. It +- matches three or more `a's. ++'a\{3,\}' ++ becomes 'a{3,}' when using extended regular expressions. It ++ matches three or more 'a's. + +-`\(abc\)\{2,3\}' +- becomes `(abc){2,3}' when using extended regular expressions. It +- matches either `abcabc' or `abcabcabc'. ++'\(abc\)\{2,3\}' ++ becomes '(abc){2,3}' when using extended regular expressions. It ++ matches either 'abcabc' or 'abcabcabc'. + +-`\(abc*\)\1' +- becomes `(abc*)\1' when using extended regular expressions. ++'\(abc*\)\1' ++ becomes '(abc*)\1' when using extended regular expressions. + Backreferences must still be escaped when using extended regular + expressions. + +@@ -2269,26 +2262,26 @@ Concept Index + ************* + + This is a general index of all issues discussed in this manual, with the +-exception of the `sed' commands and command-line options. ++exception of the 'sed' commands and command-line options. + + + * Menu: + +-* 0 address: Reporting Bugs. (line 102) +-* Additional reading about sed: Other Resources. (line 6) +-* ADDR1,+N: Addresses. (line 80) +-* ADDR1,~N: Addresses. (line 80) ++* '0' address: Reporting Bugs. (line 104) ++* Additional reading about 'sed': Other Resources. (line 6) ++* ADDR1,+N: Addresses. (line 79) ++* ADDR1,~N: Addresses. (line 79) + * Address, as a regular expression: Addresses. (line 27) + * Address, last line: Addresses. (line 22) + * Address, numeric: Addresses. (line 8) +-* Addresses, in sed scripts: Addresses. (line 6) ++* Addresses, in 'sed' scripts: Addresses. (line 6) + * Append hold space to pattern space: Other Commands. (line 125) + * Append next input line to pattern space: Other Commands. (line 105) + * Append pattern space to hold space: Other Commands. (line 117) + * Appending text after a line: Other Commands. (line 27) + * Backreferences, in regular expressions: The "s" Command. (line 19) +-* Branch to a label, if s/// failed: Extended Commands. (line 71) +-* Branch to a label, if s/// succeeded: Programming Commands. ++* Branch to a label, if 's///' failed: Extended Commands. (line 71) ++* Branch to a label, if 's///' succeeded: Programming Commands. + (line 22) + * Branch to a label, unconditionally: Programming Commands. + (line 18) +@@ -2298,91 +2291,105 @@ exception of the `sed' commands and command-line options. + * Caveat -- #n on first line: Common Commands. (line 20) + * Command groups: Common Commands. (line 50) + * Comments, in scripts: Common Commands. (line 12) +-* Conditional branch <1>: Extended Commands. (line 71) + * Conditional branch: Programming Commands. + (line 22) ++* Conditional branch <1>: Extended Commands. (line 71) + * Copy hold space into pattern space: Other Commands. (line 121) + * Copy pattern space into hold space: Other Commands. (line 113) + * Delete first line from pattern space: Other Commands. (line 99) + * Disabling autoprint, from command line: Invoking sed. (line 34) + * empty regular expression: Addresses. (line 31) +-* Emptying pattern space <1>: Reporting Bugs. (line 129) + * Emptying pattern space: Extended Commands. (line 93) ++* Emptying pattern space <1>: Reporting Bugs. (line 133) + * Evaluate Bourne-shell commands: Extended Commands. (line 12) + * Evaluate Bourne-shell commands, after substitution: The "s" Command. + (line 103) + * Exchange hold space with pattern space: Other Commands. (line 129) +-* Excluding lines: Addresses. (line 103) +-* Extended regular expressions, choosing: Invoking sed. (line 113) ++* Excluding lines: Addresses. (line 102) ++* Extended regular expressions, choosing: Invoking sed. (line 112) + * Extended regular expressions, syntax: Extended regexps. (line 6) + * File name, printing: Extended Commands. (line 30) +-* Files to be processed as input: Invoking sed. (line 148) ++* Files to be processed as input: Invoking sed. (line 147) + * Flow of control in scripts: Programming Commands. + (line 11) + * Global substitution: The "s" Command. (line 69) +-* GNU extensions, /dev/stderr file <1>: Other Commands. (line 88) +-* GNU extensions, /dev/stderr file: The "s" Command. (line 96) +-* GNU extensions, /dev/stdin file <1>: Extended Commands. (line 61) +-* GNU extensions, /dev/stdin file: Other Commands. (line 78) +-* GNU extensions, /dev/stdout file <1>: Other Commands. (line 88) +-* GNU extensions, /dev/stdout file <2>: The "s" Command. (line 96) +-* GNU extensions, /dev/stdout file: Invoking sed. (line 156) +-* GNU extensions, 0 address <1>: Reporting Bugs. (line 102) +-* GNU extensions, 0 address: Addresses. (line 80) +-* GNU extensions, 0,ADDR2 addressing: Addresses. (line 80) +-* GNU extensions, ADDR1,+N addressing: Addresses. (line 80) +-* GNU extensions, ADDR1,~N addressing: Addresses. (line 80) +-* GNU extensions, branch if s/// failed: Extended Commands. (line 71) +-* GNU extensions, case modifiers in s commands: The "s" Command. ++* GNU extensions, '/dev/stderr' file: The "s" Command. (line 96) ++* GNU extensions, '/dev/stderr' file <1>: Other Commands. (line 88) ++* GNU extensions, '/dev/stdin' file: Other Commands. (line 78) ++* GNU extensions, '/dev/stdin' file <1>: Extended Commands. (line 61) ++* GNU extensions, '/dev/stdout' file: Invoking sed. (line 155) ++* GNU extensions, '/dev/stdout' file <1>: The "s" Command. (line 96) ++* GNU extensions, '/dev/stdout' file <2>: Other Commands. (line 88) ++* GNU extensions, '0' address: Addresses. (line 79) ++* GNU extensions, '0' address <1>: Reporting Bugs. (line 104) ++* GNU extensions, 0,ADDR2 addressing: Addresses. (line 79) ++* GNU extensions, ADDR1,+N addressing: Addresses. (line 79) ++* GNU extensions, ADDR1,~N addressing: Addresses. (line 79) ++* GNU extensions, branch if 's///' failed: Extended Commands. (line 71) ++* GNU extensions, case modifiers in 's' commands: The "s" Command. + (line 23) + * GNU extensions, checking for their presence: Extended Commands. + (line 77) +-* GNU extensions, disabling: Invoking sed. (line 81) +-* GNU extensions, emptying pattern space <1>: Reporting Bugs. (line 129) ++* GNU extensions, disabling: Invoking sed. (line 80) + * GNU extensions, emptying pattern space: Extended Commands. (line 93) +-* GNU extensions, evaluating Bourne-shell commands <1>: Extended Commands. +- (line 12) ++* GNU extensions, emptying pattern space <1>: Reporting Bugs. (line 133) + * GNU extensions, evaluating Bourne-shell commands: The "s" Command. + (line 103) +-* GNU extensions, extended regular expressions: Invoking sed. (line 113) +-* GNU extensions, g and NUMBER modifier interaction in s command: The "s" Command. ++* GNU extensions, evaluating Bourne-shell commands <1>: Extended Commands. ++ (line 12) ++* GNU extensions, extended regular expressions: Invoking sed. (line 112) ++* GNU extensions, 'g' and NUMBER modifier interaction in 's' command: The "s" Command. + (line 75) +-* GNU extensions, I modifier <1>: The "s" Command. (line 112) +-* GNU extensions, I modifier: Addresses. (line 49) +-* GNU extensions, in-place editing <1>: Reporting Bugs. (line 84) ++* GNU extensions, 'I' modifier: Addresses. (line 49) ++* GNU extensions, 'I' modifier <1>: The "s" Command. (line 112) + * GNU extensions, in-place editing: Invoking sed. (line 51) +-* GNU extensions, L command: Extended Commands. (line 34) +-* GNU extensions, M modifier <1>: The "s" Command. (line 117) +-* GNU extensions, M modifier: Addresses. (line 54) ++* GNU extensions, in-place editing <1>: Reporting Bugs. (line 85) ++* GNU extensions, 'L' command: Extended Commands. (line 34) ++* GNU extensions, 'M' modifier: Addresses. (line 54) ++* GNU extensions, 'M' modifier <1>: The "s" Command. (line 117) + * GNU extensions, modifiers and the empty regular expression: Addresses. + (line 31) +-* GNU extensions, N~M addresses: Addresses. (line 13) ++* GNU extensions, 'N~M' addresses: Addresses. (line 13) + * GNU extensions, quitting silently: Extended Commands. (line 44) +-* GNU extensions, R command: Extended Commands. (line 61) ++* GNU extensions, 'R' command: Extended Commands. (line 61) + * GNU extensions, reading a file a line at a time: Extended Commands. + (line 61) + * GNU extensions, reformatting paragraphs: Extended Commands. (line 34) ++* GNU extensions, returning an exit code: Common Commands. (line 30) + * GNU extensions, returning an exit code <1>: Extended Commands. + (line 44) +-* GNU extensions, returning an exit code: Common Commands. (line 30) + * GNU extensions, setting line length: Other Commands. (line 65) +-* GNU extensions, special escapes <1>: Reporting Bugs. (line 77) + * GNU extensions, special escapes: Escapes. (line 6) +-* GNU extensions, special two-address forms: Addresses. (line 80) +-* GNU extensions, subprocesses <1>: Extended Commands. (line 12) ++* GNU extensions, special escapes <1>: Reporting Bugs. (line 78) ++* GNU extensions, special two-address forms: Addresses. (line 79) + * GNU extensions, subprocesses: The "s" Command. (line 103) +-* GNU extensions, to basic regular expressions <1>: Reporting Bugs. +- (line 50) ++* GNU extensions, subprocesses <1>: Extended Commands. (line 12) + * GNU extensions, to basic regular expressions: Regular Expressions. + (line 26) ++* GNU extensions, to basic regular expressions <1>: Regular Expressions. ++ (line 37) ++* GNU extensions, to basic regular expressions <2>: Regular Expressions. ++ (line 40) ++* GNU extensions, to basic regular expressions <3>: Regular Expressions. ++ (line 55) ++* GNU extensions, to basic regular expressions <4>: Regular Expressions. ++ (line 116) ++* GNU extensions, to basic regular expressions <5>: Reporting Bugs. ++ (line 51) + * GNU extensions, two addresses supported by most commands: Other Commands. + (line 25) ++* GNU extensions, two addresses supported by most commands <1>: Other Commands. ++ (line 44) ++* GNU extensions, two addresses supported by most commands <2>: Other Commands. ++ (line 60) ++* GNU extensions, two addresses supported by most commands <3>: Other Commands. ++ (line 76) + * GNU extensions, unlimited line length: Limitations. (line 6) + * GNU extensions, writing first line to a file: Extended Commands. + (line 88) + * Goto, in scripts: Programming Commands. + (line 18) +-* Greedy regular expression matching: Regular Expressions. (line 143) ++* Greedy regular expression matching: Regular Expressions. (line 142) + * Grouping commands: Common Commands. (line 50) + * Hold space, appending from pattern space: Other Commands. (line 117) + * Hold space, appending to pattern space: Other Commands. (line 125) +@@ -2390,7 +2397,7 @@ exception of the `sed' commands and command-line options. + * Hold space, copying pattern space into: Other Commands. (line 113) + * Hold space, definition: Execution Cycle. (line 6) + * Hold space, exchange with pattern space: Other Commands. (line 129) +-* In-place editing: Reporting Bugs. (line 84) ++* In-place editing: Reporting Bugs. (line 85) + * In-place editing, activating: Invoking sed. (line 51) + * In-place editing, Perl-style backup file names: Invoking sed. + (line 62) +@@ -2398,45 +2405,46 @@ exception of the `sed' commands and command-line options. + * Labels, in scripts: Programming Commands. + (line 14) + * Last line, selecting: Addresses. (line 22) ++* Line length, setting: Invoking sed. (line 75) + * Line length, setting <1>: Other Commands. (line 65) +-* Line length, setting: Invoking sed. (line 76) + * Line number, printing: Other Commands. (line 62) + * Line selection: Addresses. (line 6) + * Line, selecting by number: Addresses. (line 8) + * Line, selecting by regular expression match: Addresses. (line 27) + * Line, selecting last: Addresses. (line 22) + * List pattern space: Other Commands. (line 65) +-* Mixing g and NUMBER modifiers in the s command: The "s" Command. ++* Mixing 'g' and NUMBER modifiers in the 's' command: The "s" Command. + (line 75) + * Next input line, append to pattern space: Other Commands. (line 105) + * Next input line, replace pattern space with: Common Commands. + (line 44) +-* Non-bugs, 0 address: Reporting Bugs. (line 102) +-* Non-bugs, in-place editing: Reporting Bugs. (line 84) +-* Non-bugs, localization-related: Reporting Bugs. (line 111) +-* Non-bugs, N command on the last line: Reporting Bugs. (line 30) +-* Non-bugs, regex syntax clashes: Reporting Bugs. (line 50) ++* Non-bugs, '0' address: Reporting Bugs. (line 104) ++* Non-bugs, in-place editing: Reporting Bugs. (line 85) ++* Non-bugs, localization-related: Reporting Bugs. (line 114) ++* Non-bugs, localization-related <1>: Reporting Bugs. (line 133) ++* Non-bugs, 'N' command on the last line: Reporting Bugs. (line 30) ++* Non-bugs, regex syntax clashes: Reporting Bugs. (line 51) + * Parenthesized substrings: The "s" Command. (line 19) + * Pattern space, definition: Execution Cycle. (line 6) + * Portability, comments: Common Commands. (line 15) + * Portability, line length limitations: Limitations. (line 6) +-* Portability, N command on the last line: Reporting Bugs. (line 30) +-* POSIXLY_CORRECT behavior, bracket expressions: Regular Expressions. ++* Portability, 'N' command on the last line: Reporting Bugs. (line 30) ++* 'POSIXLY_CORRECT' behavior, bracket expressions: Regular Expressions. + (line 105) +-* POSIXLY_CORRECT behavior, enabling: Invoking sed. (line 84) +-* POSIXLY_CORRECT behavior, escapes: Escapes. (line 11) +-* POSIXLY_CORRECT behavior, N command: Reporting Bugs. (line 45) ++* 'POSIXLY_CORRECT' behavior, enabling: Invoking sed. (line 83) ++* 'POSIXLY_CORRECT' behavior, escapes: Escapes. (line 11) ++* 'POSIXLY_CORRECT' behavior, 'N' command: Reporting Bugs. (line 46) + * Print first line from pattern space: Other Commands. (line 110) + * Printing file name: Extended Commands. (line 30) + * Printing line number: Other Commands. (line 62) + * Printing text unambiguously: Other Commands. (line 65) +-* Quitting <1>: Extended Commands. (line 44) + * Quitting: Common Commands. (line 30) +-* Range of lines: Addresses. (line 67) +-* Range with start address of zero: Addresses. (line 80) ++* Quitting <1>: Extended Commands. (line 44) ++* Range of lines: Addresses. (line 66) ++* Range with start address of zero: Addresses. (line 79) + * Read next input line: Common Commands. (line 44) +-* Read text from a file <1>: Extended Commands. (line 61) + * Read text from a file: Other Commands. (line 78) ++* Read text from a file <1>: Extended Commands. (line 61) + * Reformat pattern space: Extended Commands. (line 34) + * Reformatting paragraphs: Extended Commands. (line 34) + * Replace hold space with copy of pattern space: Other Commands. +@@ -2448,21 +2456,21 @@ exception of the `sed' commands and command-line options. + * Replacing only Nth match of regexp in a line: The "s" Command. + (line 73) + * Replacing selected lines with other text: Other Commands. (line 52) +-* Requiring GNU sed: Extended Commands. (line 77) ++* Requiring GNU 'sed': Extended Commands. (line 77) + * Script structure: sed Programs. (line 6) + * Script, from a file: Invoking sed. (line 46) + * Script, from command line: Invoking sed. (line 41) +-* sed program structure: sed Programs. (line 6) ++* 'sed' program structure: sed Programs. (line 6) + * Selecting lines to process: Addresses. (line 6) +-* Selecting non-matching lines: Addresses. (line 103) +-* Several lines, selecting: Addresses. (line 67) ++* Selecting non-matching lines: Addresses. (line 102) ++* Several lines, selecting: Addresses. (line 66) + * Slash character, in regular expressions: Addresses. (line 41) + * Spaces, pattern and hold: Execution Cycle. (line 6) +-* Special addressing forms: Addresses. (line 80) +-* Standard input, processing as input: Invoking sed. (line 150) ++* Special addressing forms: Addresses. (line 79) ++* Standard input, processing as input: Invoking sed. (line 149) + * Stream editor: Introduction. (line 6) +-* Subprocesses <1>: Extended Commands. (line 12) + * Subprocesses: The "s" Command. (line 103) ++* Subprocesses <1>: Extended Commands. (line 12) + * Substitution of text, options: The "s" Command. (line 65) + * Text, appending: Other Commands. (line 27) + * Text, deleting: Common Commands. (line 36) +@@ -2472,13 +2480,13 @@ exception of the `sed' commands and command-line options. + * Text, writing to a file after substitution: The "s" Command. + (line 96) + * Transliteration: Other Commands. (line 14) +-* Unbuffered I/O, choosing: Invoking sed. (line 131) ++* Unbuffered I/O, choosing: Invoking sed. (line 130) + * Usage summary, printing: Invoking sed. (line 28) + * Version, printing: Invoking sed. (line 24) +-* Working on separate files: Invoking sed. (line 121) ++* Working on separate files: Invoking sed. (line 120) + * Write first line to a file: Extended Commands. (line 88) + * Write to a file: Other Commands. (line 88) +-* Zero, as range start address: Addresses. (line 80) ++* Zero, as range start address: Addresses. (line 79) + + + File: sed.info, Node: Command and Option Index, Prev: Concept Index, Up: Top +@@ -2486,43 +2494,44 @@ File: sed.info, Node: Command and Option Index, Prev: Concept Index, Up: Top + Command and Option Index + ************************ + +-This is an alphabetical list of all `sed' commands and command-line ++This is an alphabetical list of all 'sed' commands and command-line + options. + + + * Menu: + + * # (comments): Common Commands. (line 12) +-* --binary: Invoking sed. (line 93) ++* --binary: Invoking sed. (line 92) + * --expression: Invoking sed. (line 41) + * --file: Invoking sed. (line 46) +-* --follow-symlinks: Invoking sed. (line 104) ++* --follow-symlinks: Invoking sed. (line 103) + * --help: Invoking sed. (line 28) + * --in-place: Invoking sed. (line 51) +-* --line-length: Invoking sed. (line 76) +-* --null-data: Invoking sed. (line 139) +-* --posix: Invoking sed. (line 81) ++* --line-length: Invoking sed. (line 75) ++* --null-data: Invoking sed. (line 138) ++* --posix: Invoking sed. (line 80) + * --quiet: Invoking sed. (line 34) +-* --regexp-extended: Invoking sed. (line 113) +-* --separate: Invoking sed. (line 121) ++* --regexp-extended: Invoking sed. (line 112) ++* --separate: Invoking sed. (line 120) + * --silent: Invoking sed. (line 34) +-* --unbuffered: Invoking sed. (line 131) ++* --unbuffered: Invoking sed. (line 130) + * --version: Invoking sed. (line 24) +-* --zero-terminated: Invoking sed. (line 139) +-* -b: Invoking sed. (line 93) ++* --zero-terminated: Invoking sed. (line 138) ++* -b: Invoking sed. (line 92) + * -e: Invoking sed. (line 41) + * -f: Invoking sed. (line 46) + * -i: Invoking sed. (line 51) +-* -l: Invoking sed. (line 76) ++* -l: Invoking sed. (line 75) + * -n: Invoking sed. (line 34) + * -n, forcing from within a script: Common Commands. (line 20) +-* -r: Invoking sed. (line 113) +-* -s: Invoking sed. (line 121) +-* -u: Invoking sed. (line 131) +-* -z: Invoking sed. (line 139) ++* -r: Invoking sed. (line 112) ++* -s: Invoking sed. (line 120) ++* -u: Invoking sed. (line 130) ++* -z: Invoking sed. (line 138) + * : (label) command: Programming Commands. + (line 14) + * = (print line number) command: Other Commands. (line 62) ++* {} command grouping: Common Commands. (line 50) + * a (append text lines) command: Other Commands. (line 27) + * b (branch) command: Programming Commands. + (line 18) +@@ -2556,57 +2565,56 @@ options. + * x (eXchange) command: Other Commands. (line 129) + * y (transliterate) command: Other Commands. (line 14) + * z (Zap) command: Extended Commands. (line 93) +-* {} command grouping: Common Commands. (line 50) + + + + Tag Table: +-Node: Top944 +-Node: Introduction3867 +-Node: Invoking sed4421 +-Ref: Invoking sed-Footnote-110793 +-Ref: Invoking sed-Footnote-210985 +-Node: sed Programs11084 +-Node: Execution Cycle12617 +-Ref: Execution Cycle-Footnote-113794 +-Node: Addresses14095 +-Node: Regular Expressions18996 +-Node: Common Commands26905 +-Node: The "s" Command28908 +-Ref: The "s" Command-Footnote-134229 +-Node: Other Commands34301 +-Ref: Other Commands-Footnote-139501 +-Node: Programming Commands39573 +-Node: Extended Commands40487 +-Node: Escapes44752 +-Ref: Escapes-Footnote-147763 +-Node: Examples47954 +-Node: Centering lines49050 +-Node: Increment a number49942 +-Ref: Increment a number-Footnote-151419 +-Node: Rename files to lower case51539 +-Node: Print bash environment54312 +-Node: Reverse chars of lines55067 +-Ref: Reverse chars of lines-Footnote-156068 +-Node: tac56285 +-Node: cat -n57052 +-Node: cat -b58874 +-Node: wc -c59621 +-Ref: wc -c-Footnote-161529 +-Node: wc -w61598 +-Node: wc -l63062 +-Node: head63306 +-Node: tail63637 +-Node: uniq65318 +-Node: uniq -d66106 +-Node: uniq -u66817 +-Node: cat -s67528 +-Node: Limitations69379 +-Node: Other Resources70220 +-Node: Reporting Bugs71065 +-Ref: Reporting Bugs-Footnote-178131 +-Node: Extended regexps78202 +-Node: Concept Index79517 +-Node: Command and Option Index94612 ++Node: Top915 ++Node: Introduction3838 ++Node: Invoking sed4392 ++Ref: Invoking sed-Footnote-110758 ++Ref: Invoking sed-Footnote-210950 ++Node: sed Programs11049 ++Node: Execution Cycle12582 ++Ref: Execution Cycle-Footnote-113762 ++Node: Addresses14063 ++Node: Regular Expressions18963 ++Node: Common Commands26872 ++Node: The "s" Command28874 ++Ref: The "s" Command-Footnote-134194 ++Node: Other Commands34266 ++Ref: Other Commands-Footnote-139465 ++Node: Programming Commands39537 ++Node: Extended Commands40450 ++Node: Escapes44712 ++Ref: Escapes-Footnote-147722 ++Node: Examples47913 ++Node: Centering lines49009 ++Node: Increment a number49901 ++Ref: Increment a number-Footnote-151378 ++Node: Rename files to lower case51498 ++Node: Print bash environment54271 ++Node: Reverse chars of lines55026 ++Ref: Reverse chars of lines-Footnote-156027 ++Node: tac56244 ++Node: cat -n57011 ++Node: cat -b58831 ++Node: wc -c59578 ++Ref: wc -c-Footnote-161486 ++Node: wc -w61555 ++Node: wc -l63019 ++Node: head63264 ++Node: tail63595 ++Node: uniq65276 ++Node: uniq -d66062 ++Node: uniq -u66773 ++Node: cat -s67482 ++Node: Limitations69333 ++Node: Other Resources70174 ++Node: Reporting Bugs71019 ++Ref: Reporting Bugs-Footnote-178088 ++Node: Extended regexps78159 ++Node: Concept Index79474 ++Node: Command and Option Index95698 + + End Tag Table +diff --git a/doc/stamp-vti b/doc/stamp-vti +index 0a7839c..e61a78f 100644 +--- a/doc/stamp-vti ++++ b/doc/stamp-vti +@@ -1,4 +1,4 @@ +-@set UPDATED 22 December 2012 +-@set UPDATED-MONTH December 2012 ++@set UPDATED 16 May 2016 ++@set UPDATED-MONTH May 2016 + @set EDITION 4.2.2 + @set VERSION 4.2.2 +diff --git a/doc/version.texi b/doc/version.texi +index 0a7839c..e61a78f 100644 +--- a/doc/version.texi ++++ b/doc/version.texi +@@ -1,4 +1,4 @@ +-@set UPDATED 22 December 2012 +-@set UPDATED-MONTH December 2012 ++@set UPDATED 16 May 2016 ++@set UPDATED-MONTH May 2016 + @set EDITION 4.2.2 + @set VERSION 4.2.2 +diff --git a/lib/Makefile.in b/lib/Makefile.in +index 00c857f..544b627 100644 +--- a/lib/Makefile.in ++++ b/lib/Makefile.in +@@ -1,7 +1,7 @@ +-# Makefile.in generated by automake 1.12.2 from Makefile.am. ++# Makefile.in generated by automake 1.15 from Makefile.am. + # @configure_input@ + +-# Copyright (C) 1994-2012 Free Software Foundation, Inc. ++# Copyright (C) 1994-2014 Free Software Foundation, Inc. + + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, +@@ -40,23 +40,61 @@ + + + VPATH = @srcdir@ +-am__make_dryrun = \ +- { \ +- am__dry=no; \ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++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 \ + *\\[\ \ ]*) \ +- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ +- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ +- *) \ +- for am__flg in $$MAKEFLAGS; do \ +- case $$am__flg in \ +- *=*|--*) ;; \ +- *n*) am__dry=yes; break;; \ +- esac; \ +- done;; \ ++ 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; \ +- test $$am__dry = yes; \ +- } ++ 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@ +@@ -74,9 +112,6 @@ PRE_UNINSTALL = : + POST_UNINSTALL = : + build_triplet = @build@ + host_triplet = @host@ +-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ +- $(srcdir)/Makefile.in $(srcdir)/gnulib.mk \ +- $(top_srcdir)/build-aux/depcomp alloca.c + subdir = lib + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ +@@ -137,11 +172,17 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ ++ $(am__DIST_COMMON) + mkinstalldirs = $(install_sh) -d + CONFIG_HEADER = $(top_builddir)/config.h + CONFIG_CLEAN_FILES = + CONFIG_CLEAN_VPATH_FILES = + LIBRARIES = $(noinst_LIBRARIES) ++AM_V_AR = $(am__v_AR_@AM_V@) ++am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) ++am__v_AR_0 = @echo " AR " $@; ++am__v_AR_1 = + libsed_a_AR = $(AR) $(ARFLAGS) + am__DEPENDENCIES_1 = + am_libsed_a_OBJECTS = set-mode-acl.$(OBJEXT) copy-acl.$(OBJEXT) \ +@@ -156,23 +197,44 @@ am_libsed_a_OBJECTS = set-mode-acl.$(OBJEXT) copy-acl.$(OBJEXT) \ + xalloc-die.$(OBJEXT) + libsed_a_OBJECTS = $(am_libsed_a_OBJECTS) + LTLIBRARIES = $(noinst_LTLIBRARIES) ++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)/build-aux/depcomp + am__depfiles_maybe = depfiles + am__mv = mv -f + 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 = $(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 = $(libsed_a_SOURCES) $(EXTRA_libsed_a_SOURCES) + DIST_SOURCES = $(libsed_a_SOURCES) $(EXTRA_libsed_a_SOURCES) +-RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive ++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;; \ +@@ -181,12 +243,34 @@ am__can_run_installinfo = \ + HEADERS = $(noinst_HEADERS) + RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ +- $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ ++am__recursive_targets = \ ++ $(RECURSIVE_TARGETS) \ ++ $(RECURSIVE_CLEAN_TARGETS) \ ++ $(am__extra_recursive_targets) ++AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir ++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 + DIST_SUBDIRS = $(SUBDIRS) ++am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/gnulib.mk \ ++ $(top_srcdir)/build-aux/depcomp alloca.c + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + am__relativize = \ + dir0=`pwd`; \ +@@ -218,6 +302,7 @@ ACLOCAL = @ACLOCAL@ + ALLOCA = @ALLOCA@ + ALLOCA_H = @ALLOCA_H@ + AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ + APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ + AR = @AR@ + ARFLAGS = @ARFLAGS@ +@@ -1110,7 +1195,6 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(am__configur + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits lib/Makefile +-.PRECIOUS: Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ +@@ -1119,7 +1203,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +-$(srcdir)/gnulib.mk: ++$(srcdir)/gnulib.mk $(am__empty): + + $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +@@ -1132,10 +1216,11 @@ $(am__aclocal_m4_deps): + + clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) ++ + libsed.a: $(libsed_a_OBJECTS) $(libsed_a_DEPENDENCIES) $(EXTRA_libsed_a_DEPENDENCIES) +- -rm -f libsed.a +- $(libsed_a_AR) libsed.a $(libsed_a_OBJECTS) $(libsed_a_LIBADD) +- $(RANLIB) libsed.a ++ $(AM_V_at)-rm -f libsed.a ++ $(AM_V_AR)$(libsed_a_AR) libsed.a $(libsed_a_OBJECTS) $(libsed_a_LIBADD) ++ $(AM_V_at)$(RANLIB) libsed.a + + clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) +@@ -1220,18 +1305,18 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ + + .c.o: +-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + + .c.obj: +-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + + # This directory's subdirectories are mostly independent; you can cd + # into them and run 'make' without going through this Makefile. +@@ -1239,14 +1324,13 @@ distclean-compile: + # (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. +-$(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): +- @fail= failcom='exit 1'; \ +- for f in x $$MAKEFLAGS; do \ +- case $$f in \ +- *=* | --[!k]*);; \ +- *k*) failcom='fail=yes';; \ +- esac; \ +- done; \ ++$(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 \ +@@ -1267,31 +1351,13 @@ $(RECURSIVE_TARGETS) $(RECURSIVE_CLEAN_TARGETS): + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" +-tags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ +- done +-ctags-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ +- done +-cscopelist-recursive: +- list='$(SUBDIRS)'; for subdir in $$list; do \ +- test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ +- done + +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) ++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 \ +@@ -1307,12 +1373,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ +@@ -1324,15 +1385,11 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $$unique; \ + fi; \ + fi +-ctags: CTAGS +-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++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 +@@ -1341,9 +1398,10 @@ GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-recursive + +-cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP)'; \ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ +@@ -1527,14 +1585,12 @@ ps-am: + + uninstall-am: uninstall-local + +-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ +- cscopelist-recursive ctags-recursive install install-am \ +- install-strip tags-recursive ++.MAKE: $(am__recursive_targets) all check install install-am \ ++ install-strip + +-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ +- all all-am all-local check check-am clean clean-generic \ +- clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist \ +- cscopelist-recursive ctags ctags-recursive distclean \ ++.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ ++ check check-am clean clean-generic clean-noinstLIBRARIES \ ++ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ +@@ -1544,8 +1600,10 @@ uninstall-am: uninstall-local + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ +- mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \ +- uninstall uninstall-am uninstall-local ++ mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ ++ uninstall-am uninstall-local ++ ++.PRECIOUS: Makefile + + + # We need the following in order to create <alloca.h> when the system +diff --git a/sed/Makefile.in b/sed/Makefile.in +index 3a6a33b..8df0e9e 100644 +--- a/sed/Makefile.in ++++ b/sed/Makefile.in +@@ -1,7 +1,7 @@ +-# Makefile.in generated by automake 1.12.2 from Makefile.am. ++# Makefile.in generated by automake 1.15 from Makefile.am. + # @configure_input@ + +-# Copyright (C) 1994-2012 Free Software Foundation, Inc. ++# Copyright (C) 1994-2014 Free Software Foundation, Inc. + + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, +@@ -16,23 +16,61 @@ + + + VPATH = @srcdir@ +-am__make_dryrun = \ +- { \ +- am__dry=no; \ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++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 \ + *\\[\ \ ]*) \ +- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ +- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ +- *) \ +- for am__flg in $$MAKEFLAGS; do \ +- case $$am__flg in \ +- *=*|--*) ;; \ +- *n*) am__dry=yes; break;; \ +- esac; \ +- done;; \ ++ 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; \ +- test $$am__dry = yes; \ +- } ++ 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@ +@@ -52,8 +90,6 @@ build_triplet = @build@ + host_triplet = @host@ + bin_PROGRAMS = sed$(EXEEXT) + subdir = sed +-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ +- $(srcdir)/Makefile.in $(top_srcdir)/build-aux/depcomp + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ +@@ -113,6 +149,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ ++ $(am__DIST_COMMON) + mkinstalldirs = $(install_sh) -d + CONFIG_HEADER = $(top_builddir)/config.h + CONFIG_CLEAN_FILES = +@@ -122,14 +160,34 @@ PROGRAMS = $(bin_PROGRAMS) + am_sed_OBJECTS = sed.$(OBJEXT) compile.$(OBJEXT) execute.$(OBJEXT) \ + regexp.$(OBJEXT) fmt.$(OBJEXT) mbcs.$(OBJEXT) utils.$(OBJEXT) + sed_OBJECTS = $(am_sed_OBJECTS) ++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)/build-aux/depcomp + am__depfiles_maybe = depfiles + am__mv = mv -f + 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 = $(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 = $(sed_SOURCES) + DIST_SOURCES = $(sed_SOURCES) + am__can_run_installinfo = \ +@@ -138,14 +196,34 @@ am__can_run_installinfo = \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac + HEADERS = $(noinst_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__DIST_COMMON = $(srcdir)/Makefile.in \ ++ $(top_srcdir)/build-aux/depcomp + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + pkglibexecdir = @pkglibexecdir@ + ACLOCAL = @ACLOCAL@ + ALLOCA = @ALLOCA@ + ALLOCA_H = @ALLOCA_H@ + AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ + APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ + AR = @AR@ + ARFLAGS = @ARFLAGS@ +@@ -940,10 +1018,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + exit 1;; \ + esac; \ + done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits sed/Makefile'; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ +- $(AUTOMAKE) --gnits sed/Makefile +-.PRECIOUS: Makefile ++ $(AUTOMAKE) --gnu sed/Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ +@@ -970,10 +1047,11 @@ install-binPROGRAMS: $(bin_PROGRAMS) + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ +- while read p p1; do if test -f $$p; \ +- then echo "$$p"; echo "$$p"; else :; fi; \ ++ while read p p1; do if test -f $$p \ ++ ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ +- sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ ++ 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 } \ +@@ -994,7 +1072,8 @@ uninstall-binPROGRAMS: + @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)/' `; \ ++ -e 's/$$/$(EXEEXT)/' \ ++ `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files +@@ -1002,24 +1081,9 @@ uninstall-binPROGRAMS: + clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +-installcheck-binPROGRAMS: $(bin_PROGRAMS) +- bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ +- case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ +- *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ +- esac; \ +- f=`echo "$$p" | \ +- sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ +- for opt in --help --version; do \ +- if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ +- 2>c$${pid}_.err </dev/null \ +- && test -n "`cat c$${pid}_.out`" \ +- && test -z "`cat c$${pid}_.err`"; then :; \ +- else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \ +- done; \ +- done; rm -f c$${pid}_.???; exit $$bad + sed$(EXEEXT): $(sed_OBJECTS) $(sed_DEPENDENCIES) $(EXTRA_sed_DEPENDENCIES) + @rm -f sed$(EXEEXT) +- $(LINK) $(sed_OBJECTS) $(sed_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(sed_OBJECTS) $(sed_LDADD) $(LIBS) + + mostlyclean-compile: + -rm -f *.$(OBJEXT) +@@ -1036,39 +1100,28 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ + + .c.o: +-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + + .c.obj: +-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ++ ++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`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ +@@ -1080,15 +1133,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $$unique; \ + fi; \ + fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++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 +@@ -1097,9 +1146,10 @@ GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-am + +-cscopelist: $(HEADERS) $(SOURCES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP)'; \ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ +@@ -1230,7 +1280,7 @@ install-ps: install-ps-am + + install-ps-am: + +-installcheck-am: installcheck-binPROGRAMS ++installcheck-am: + + maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) +@@ -1253,18 +1303,21 @@ uninstall-am: uninstall-binPROGRAMS + + .MAKE: install-am install-strip + +-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ +- clean-generic cscopelist ctags distclean distclean-compile \ +- distclean-generic 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-man install-pdf \ +- install-pdf-am install-ps install-ps-am install-strip \ +- installcheck installcheck-am installcheck-binPROGRAMS \ ++.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ ++ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ ++ distclean distclean-compile distclean-generic 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-man 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 pdf pdf-am \ +- ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS ++ ps ps-am tags tags-am uninstall uninstall-am \ ++ uninstall-binPROGRAMS ++ ++.PRECIOUS: Makefile + + + $(PROGRAMS): $(LDADD) +diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in +index 66e72ce..a82e37a 100644 +--- a/testsuite/Makefile.in ++++ b/testsuite/Makefile.in +@@ -1,7 +1,7 @@ +-# Makefile.in generated by automake 1.12.2 from Makefile.am. ++# Makefile.in generated by automake 1.15 from Makefile.am. + # @configure_input@ + +-# Copyright (C) 1994-2012 Free Software Foundation, Inc. ++# Copyright (C) 1994-2014 Free Software Foundation, Inc. + + # This Makefile.in is free software; the Free Software Foundation + # gives unlimited permission to copy and/or distribute it, +@@ -15,23 +15,61 @@ + @SET_MAKE@ + + VPATH = @srcdir@ +-am__make_dryrun = \ +- { \ +- am__dry=no; \ ++am__is_gnu_make = { \ ++ if test -z '$(MAKELEVEL)'; then \ ++ false; \ ++ elif test -n '$(MAKE_HOST)'; then \ ++ true; \ ++ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ ++ true; \ ++ else \ ++ false; \ ++ fi; \ ++} ++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 \ + *\\[\ \ ]*) \ +- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ +- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ +- *) \ +- for am__flg in $$MAKEFLAGS; do \ +- case $$am__flg in \ +- *=*|--*) ;; \ +- *n*) am__dry=yes; break;; \ +- esac; \ +- done;; \ ++ bs=\\; \ ++ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ ++ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ +- test $$am__dry = yes; \ +- } ++ 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@ +@@ -61,9 +99,6 @@ host_triplet = @host@ + @TEST_REGEX_TRUE@ tst-rxspencer$(EXEEXT) tst-regex2$(EXEEXT) + @TEST_REGEX_TRUE@am__append_1 = space + subdir = testsuite +-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ +- $(srcdir)/Makefile.in $(srcdir)/version.gin \ +- $(top_srcdir)/build-aux/depcomp + ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 + am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ +@@ -123,6 +158,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/configure.ac + am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) ++DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ ++ $(am__DIST_COMMON) + mkinstalldirs = $(install_sh) -d + CONFIG_HEADER = $(top_builddir)/config.h + CONFIG_CLEAN_FILES = version.good +@@ -203,14 +240,34 @@ tst_rxspencer_SOURCES = tst-rxspencer.c + tst_rxspencer_OBJECTS = tst-rxspencer.$(OBJEXT) + tst_rxspencer_LDADD = $(LDADD) + tst_rxspencer_DEPENDENCIES = ../lib/libsed.a ++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)/build-aux/depcomp + am__depfiles_maybe = depfiles + am__mv = mv -f + 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 = $(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 = bug-regex10.c bug-regex11.c bug-regex12.c bug-regex13.c \ + bug-regex14.c bug-regex15.c bug-regex16.c bug-regex21.c \ + bug-regex27.c bug-regex28.c bug-regex7.c bug-regex8.c \ +@@ -227,18 +284,239 @@ am__can_run_installinfo = \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac + HEADERS = $(noinst_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) ++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='[0;31m'; \ ++ grn='[0;32m'; \ ++ lgn='[1;32m'; \ ++ blu='[1;34m'; \ ++ mgn='[0;35m'; \ ++ brg='[1m'; \ ++ std='[m'; \ ++ fi; \ ++} ++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__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 ++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) ++am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/version.gin \ ++ $(top_srcdir)/build-aux/depcomp \ ++ $(top_srcdir)/build-aux/test-driver + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + pkglibexecdir = @pkglibexecdir@ + ACLOCAL = @ACLOCAL@ + ALLOCA = @ALLOCA@ + ALLOCA_H = @ALLOCA_H@ + AMTAR = @AMTAR@ ++AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ + APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ + AR = @AR@ + ARFLAGS = @ARFLAGS@ +@@ -1097,7 +1375,7 @@ EXTRA_DIST = \ + all: all-am + + .SUFFIXES: +-.SUFFIXES: .c .o .obj ++.SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs + $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ +@@ -1107,10 +1385,9 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + exit 1;; \ + esac; \ + done; \ +- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits testsuite/Makefile'; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu testsuite/Makefile'; \ + $(am__cd) $(top_srcdir) && \ +- $(AUTOMAKE) --gnits testsuite/Makefile +-.PRECIOUS: Makefile ++ $(AUTOMAKE) --gnu testsuite/Makefile + Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ +@@ -1133,63 +1410,82 @@ version.good: $(top_builddir)/config.status $(srcdir)/version.gin + + clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) ++ + bug-regex10$(EXEEXT): $(bug_regex10_OBJECTS) $(bug_regex10_DEPENDENCIES) $(EXTRA_bug_regex10_DEPENDENCIES) + @rm -f bug-regex10$(EXEEXT) +- $(LINK) $(bug_regex10_OBJECTS) $(bug_regex10_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex10_OBJECTS) $(bug_regex10_LDADD) $(LIBS) ++ + bug-regex11$(EXEEXT): $(bug_regex11_OBJECTS) $(bug_regex11_DEPENDENCIES) $(EXTRA_bug_regex11_DEPENDENCIES) + @rm -f bug-regex11$(EXEEXT) +- $(LINK) $(bug_regex11_OBJECTS) $(bug_regex11_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex11_OBJECTS) $(bug_regex11_LDADD) $(LIBS) ++ + bug-regex12$(EXEEXT): $(bug_regex12_OBJECTS) $(bug_regex12_DEPENDENCIES) $(EXTRA_bug_regex12_DEPENDENCIES) + @rm -f bug-regex12$(EXEEXT) +- $(LINK) $(bug_regex12_OBJECTS) $(bug_regex12_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex12_OBJECTS) $(bug_regex12_LDADD) $(LIBS) ++ + bug-regex13$(EXEEXT): $(bug_regex13_OBJECTS) $(bug_regex13_DEPENDENCIES) $(EXTRA_bug_regex13_DEPENDENCIES) + @rm -f bug-regex13$(EXEEXT) +- $(LINK) $(bug_regex13_OBJECTS) $(bug_regex13_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex13_OBJECTS) $(bug_regex13_LDADD) $(LIBS) ++ + bug-regex14$(EXEEXT): $(bug_regex14_OBJECTS) $(bug_regex14_DEPENDENCIES) $(EXTRA_bug_regex14_DEPENDENCIES) + @rm -f bug-regex14$(EXEEXT) +- $(LINK) $(bug_regex14_OBJECTS) $(bug_regex14_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex14_OBJECTS) $(bug_regex14_LDADD) $(LIBS) ++ + bug-regex15$(EXEEXT): $(bug_regex15_OBJECTS) $(bug_regex15_DEPENDENCIES) $(EXTRA_bug_regex15_DEPENDENCIES) + @rm -f bug-regex15$(EXEEXT) +- $(LINK) $(bug_regex15_OBJECTS) $(bug_regex15_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex15_OBJECTS) $(bug_regex15_LDADD) $(LIBS) ++ + bug-regex16$(EXEEXT): $(bug_regex16_OBJECTS) $(bug_regex16_DEPENDENCIES) $(EXTRA_bug_regex16_DEPENDENCIES) + @rm -f bug-regex16$(EXEEXT) +- $(LINK) $(bug_regex16_OBJECTS) $(bug_regex16_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex16_OBJECTS) $(bug_regex16_LDADD) $(LIBS) ++ + bug-regex21$(EXEEXT): $(bug_regex21_OBJECTS) $(bug_regex21_DEPENDENCIES) $(EXTRA_bug_regex21_DEPENDENCIES) + @rm -f bug-regex21$(EXEEXT) +- $(LINK) $(bug_regex21_OBJECTS) $(bug_regex21_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex21_OBJECTS) $(bug_regex21_LDADD) $(LIBS) ++ + bug-regex27$(EXEEXT): $(bug_regex27_OBJECTS) $(bug_regex27_DEPENDENCIES) $(EXTRA_bug_regex27_DEPENDENCIES) + @rm -f bug-regex27$(EXEEXT) +- $(LINK) $(bug_regex27_OBJECTS) $(bug_regex27_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex27_OBJECTS) $(bug_regex27_LDADD) $(LIBS) ++ + bug-regex28$(EXEEXT): $(bug_regex28_OBJECTS) $(bug_regex28_DEPENDENCIES) $(EXTRA_bug_regex28_DEPENDENCIES) + @rm -f bug-regex28$(EXEEXT) +- $(LINK) $(bug_regex28_OBJECTS) $(bug_regex28_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex28_OBJECTS) $(bug_regex28_LDADD) $(LIBS) ++ + bug-regex7$(EXEEXT): $(bug_regex7_OBJECTS) $(bug_regex7_DEPENDENCIES) $(EXTRA_bug_regex7_DEPENDENCIES) + @rm -f bug-regex7$(EXEEXT) +- $(LINK) $(bug_regex7_OBJECTS) $(bug_regex7_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex7_OBJECTS) $(bug_regex7_LDADD) $(LIBS) ++ + bug-regex8$(EXEEXT): $(bug_regex8_OBJECTS) $(bug_regex8_DEPENDENCIES) $(EXTRA_bug_regex8_DEPENDENCIES) + @rm -f bug-regex8$(EXEEXT) +- $(LINK) $(bug_regex8_OBJECTS) $(bug_regex8_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex8_OBJECTS) $(bug_regex8_LDADD) $(LIBS) ++ + bug-regex9$(EXEEXT): $(bug_regex9_OBJECTS) $(bug_regex9_DEPENDENCIES) $(EXTRA_bug_regex9_DEPENDENCIES) + @rm -f bug-regex9$(EXEEXT) +- $(LINK) $(bug_regex9_OBJECTS) $(bug_regex9_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(bug_regex9_OBJECTS) $(bug_regex9_LDADD) $(LIBS) ++ + runptests$(EXEEXT): $(runptests_OBJECTS) $(runptests_DEPENDENCIES) $(EXTRA_runptests_DEPENDENCIES) + @rm -f runptests$(EXEEXT) +- $(LINK) $(runptests_OBJECTS) $(runptests_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(runptests_OBJECTS) $(runptests_LDADD) $(LIBS) ++ + runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES) + @rm -f runtests$(EXEEXT) +- $(LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS) ++ + tst-boost$(EXEEXT): $(tst_boost_OBJECTS) $(tst_boost_DEPENDENCIES) $(EXTRA_tst_boost_DEPENDENCIES) + @rm -f tst-boost$(EXEEXT) +- $(LINK) $(tst_boost_OBJECTS) $(tst_boost_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(tst_boost_OBJECTS) $(tst_boost_LDADD) $(LIBS) ++ + tst-pcre$(EXEEXT): $(tst_pcre_OBJECTS) $(tst_pcre_DEPENDENCIES) $(EXTRA_tst_pcre_DEPENDENCIES) + @rm -f tst-pcre$(EXEEXT) +- $(LINK) $(tst_pcre_OBJECTS) $(tst_pcre_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(tst_pcre_OBJECTS) $(tst_pcre_LDADD) $(LIBS) ++ + tst-regex2$(EXEEXT): $(tst_regex2_OBJECTS) $(tst_regex2_DEPENDENCIES) $(EXTRA_tst_regex2_DEPENDENCIES) + @rm -f tst-regex2$(EXEEXT) +- $(LINK) $(tst_regex2_OBJECTS) $(tst_regex2_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(tst_regex2_OBJECTS) $(tst_regex2_LDADD) $(LIBS) ++ + tst-rxspencer$(EXEEXT): $(tst_rxspencer_OBJECTS) $(tst_rxspencer_DEPENDENCIES) $(EXTRA_tst_rxspencer_DEPENDENCIES) + @rm -f tst-rxspencer$(EXEEXT) +- $(LINK) $(tst_rxspencer_OBJECTS) $(tst_rxspencer_LDADD) $(LIBS) ++ $(AM_V_CCLD)$(LINK) $(tst_rxspencer_OBJECTS) $(tst_rxspencer_LDADD) $(LIBS) + + mostlyclean-compile: + -rm -f *.$(OBJEXT) +@@ -1218,39 +1514,28 @@ distclean-compile: + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-rxspencer.Po@am__quote@ + + .c.o: +-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c $< ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + + .c.obj: +-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +-@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +- +-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ +- mkid -fID $$unique +-tags: TAGS +- +-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ++ ++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`; \ +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ +@@ -1262,15 +1547,11 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $$unique; \ + fi; \ + fi +-ctags: CTAGS +-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +- $(TAGS_FILES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ +- unique=`for i in $$list; do \ +- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ +- done | \ +- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ +- END { if (nonempty) { for (i in files) print i; }; }'`; \ ++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 +@@ -1279,9 +1560,10 @@ GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" ++cscopelist: cscopelist-am + +-cscopelist: $(HEADERS) $(SOURCES) $(LISP) +- list='$(SOURCES) $(HEADERS) $(LISP)'; \ ++cscopelist-am: $(am__tagged_files) ++ list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ +@@ -1297,98 +1579,763 @@ cscopelist: $(HEADERS) $(SOURCES) $(LISP) + distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +-check-TESTS: $(TESTS) +- @failed=0; all=0; xfail=0; xpass=0; skip=0; \ +- srcdir=$(srcdir); export srcdir; \ +- list=' $(TESTS) '; \ +- $(am__tty_colors); \ +- if test -n "$$list"; then \ +- for tst in $$list; do \ +- if test -f ./$$tst; then dir=./; \ +- elif test -f $$tst; then dir=; \ +- else dir="$(srcdir)/"; fi; \ +- if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ +- all=`expr $$all + 1`; \ +- case " $(XFAIL_TESTS) " in \ +- *[\ \ ]$$tst[\ \ ]*) \ +- xpass=`expr $$xpass + 1`; \ +- failed=`expr $$failed + 1`; \ +- col=$$red; res=XPASS; \ +- ;; \ +- *) \ +- col=$$grn; res=PASS; \ +- ;; \ +- esac; \ +- elif test $$? -ne 77; then \ +- all=`expr $$all + 1`; \ +- case " $(XFAIL_TESTS) " in \ +- *[\ \ ]$$tst[\ \ ]*) \ +- xfail=`expr $$xfail + 1`; \ +- col=$$lgn; res=XFAIL; \ +- ;; \ +- *) \ +- failed=`expr $$failed + 1`; \ +- col=$$red; res=FAIL; \ +- ;; \ +- esac; \ +- else \ +- skip=`expr $$skip + 1`; \ +- col=$$blu; res=SKIP; \ +- fi; \ +- echo "$${col}$$res$${std}: $$tst"; \ +- done; \ +- if test "$$all" -eq 1; then \ +- tests="test"; \ +- All=""; \ +- else \ +- tests="tests"; \ +- All="All "; \ ++# 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; \ +- if test "$$failed" -eq 0; then \ +- if test "$$xfail" -eq 0; then \ +- banner="$$All$$all $$tests passed"; \ +- else \ +- if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ +- banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ +- fi; \ +- else \ +- if test "$$xpass" -eq 0; then \ +- banner="$$failed of $$all $$tests failed"; \ ++ fi; \ ++ if test -n "$$am__remaking_logs"; then \ ++ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ ++ "recursion detected" >&2; \ ++ elif test -n "$$redo_logs"; then \ ++ 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 \ +- if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ +- banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ ++ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ +- fi; \ +- dashes="$$banner"; \ +- skipped=""; \ +- if test "$$skip" -ne 0; then \ +- if test "$$skip" -eq 1; then \ +- skipped="($$skip test was not run)"; \ ++ shift; \ ++ desc=$$1 count=$$2; \ ++ if test $$maybe_colorize = yes && test $$count -gt 0; then \ ++ color_start=$$3 color_end=$$std; \ + else \ +- skipped="($$skip tests were not run)"; \ ++ color_start= color_end=; \ + fi; \ +- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ +- dashes="$$skipped"; \ +- fi; \ +- report=""; \ +- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ +- report="Please report to $(PACKAGE_BUGREPORT)"; \ +- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ +- dashes="$$report"; \ +- fi; \ +- dashes=`echo "$$dashes" | sed s/./=/g`; \ +- if test "$$failed" -eq 0; then \ +- col="$$grn"; \ +- else \ +- col="$$red"; \ +- fi; \ +- echo "$${col}$$dashes$${std}"; \ +- echo "$${col}$$banner$${std}"; \ +- test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ +- test -z "$$report" || echo "$${col}$$report$${std}"; \ +- echo "$${col}$$dashes$${std}"; \ +- test "$$failed" -eq 0; \ +- else :; 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 $$? ++bug-regex7.log: bug-regex7$(EXEEXT) ++ @p='bug-regex7$(EXEEXT)'; \ ++ b='bug-regex7'; \ ++ $(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) ++bug-regex8.log: bug-regex8$(EXEEXT) ++ @p='bug-regex8$(EXEEXT)'; \ ++ b='bug-regex8'; \ ++ $(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) ++bug-regex9.log: bug-regex9$(EXEEXT) ++ @p='bug-regex9$(EXEEXT)'; \ ++ b='bug-regex9'; \ ++ $(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) ++bug-regex10.log: bug-regex10$(EXEEXT) ++ @p='bug-regex10$(EXEEXT)'; \ ++ b='bug-regex10'; \ ++ $(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) ++bug-regex11.log: bug-regex11$(EXEEXT) ++ @p='bug-regex11$(EXEEXT)'; \ ++ b='bug-regex11'; \ ++ $(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) ++bug-regex12.log: bug-regex12$(EXEEXT) ++ @p='bug-regex12$(EXEEXT)'; \ ++ b='bug-regex12'; \ ++ $(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) ++bug-regex13.log: bug-regex13$(EXEEXT) ++ @p='bug-regex13$(EXEEXT)'; \ ++ b='bug-regex13'; \ ++ $(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) ++bug-regex14.log: bug-regex14$(EXEEXT) ++ @p='bug-regex14$(EXEEXT)'; \ ++ b='bug-regex14'; \ ++ $(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) ++bug-regex15.log: bug-regex15$(EXEEXT) ++ @p='bug-regex15$(EXEEXT)'; \ ++ b='bug-regex15'; \ ++ $(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) ++bug-regex16.log: bug-regex16$(EXEEXT) ++ @p='bug-regex16$(EXEEXT)'; \ ++ b='bug-regex16'; \ ++ $(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) ++bug-regex21.log: bug-regex21$(EXEEXT) ++ @p='bug-regex21$(EXEEXT)'; \ ++ b='bug-regex21'; \ ++ $(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) ++bug-regex27.log: bug-regex27$(EXEEXT) ++ @p='bug-regex27$(EXEEXT)'; \ ++ b='bug-regex27'; \ ++ $(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) ++bug-regex28.log: bug-regex28$(EXEEXT) ++ @p='bug-regex28$(EXEEXT)'; \ ++ b='bug-regex28'; \ ++ $(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) ++tst-pcre.log: tst-pcre$(EXEEXT) ++ @p='tst-pcre$(EXEEXT)'; \ ++ b='tst-pcre'; \ ++ $(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) ++tst-boost.log: tst-boost$(EXEEXT) ++ @p='tst-boost$(EXEEXT)'; \ ++ b='tst-boost'; \ ++ $(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) ++runtests.log: runtests$(EXEEXT) ++ @p='runtests$(EXEEXT)'; \ ++ b='runtests'; \ ++ $(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) ++runptests.log: runptests$(EXEEXT) ++ @p='runptests$(EXEEXT)'; \ ++ b='runptests'; \ ++ $(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) ++tst-rxspencer.log: tst-rxspencer$(EXEEXT) ++ @p='tst-rxspencer$(EXEEXT)'; \ ++ b='tst-rxspencer'; \ ++ $(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) ++tst-regex2.log: tst-regex2$(EXEEXT) ++ @p='tst-regex2$(EXEEXT)'; \ ++ b='tst-regex2'; \ ++ $(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) ++space.log: space ++ @p='space'; \ ++ b='space'; \ ++ $(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) ++appquit.log: appquit ++ @p='appquit'; \ ++ b='appquit'; \ ++ $(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) ++enable.log: enable ++ @p='enable'; \ ++ b='enable'; \ ++ $(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) ++sep.log: sep ++ @p='sep'; \ ++ b='sep'; \ ++ $(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) ++inclib.log: inclib ++ @p='inclib'; \ ++ b='inclib'; \ ++ $(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) ++8bit.log: 8bit ++ @p='8bit'; \ ++ b='8bit'; \ ++ $(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) ++newjis.log: newjis ++ @p='newjis'; \ ++ b='newjis'; \ ++ $(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) ++xabcx.log: xabcx ++ @p='xabcx'; \ ++ b='xabcx'; \ ++ $(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) ++dollar.log: dollar ++ @p='dollar'; \ ++ b='dollar'; \ ++ $(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) ++noeol.log: noeol ++ @p='noeol'; \ ++ b='noeol'; \ ++ $(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) ++noeolw.log: noeolw ++ @p='noeolw'; \ ++ b='noeolw'; \ ++ $(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) ++modulo.log: modulo ++ @p='modulo'; \ ++ b='modulo'; \ ++ $(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) ++numsub.log: numsub ++ @p='numsub'; \ ++ b='numsub'; \ ++ $(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) ++numsub2.log: numsub2 ++ @p='numsub2'; \ ++ b='numsub2'; \ ++ $(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) ++numsub3.log: numsub3 ++ @p='numsub3'; \ ++ b='numsub3'; \ ++ $(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) ++numsub4.log: numsub4 ++ @p='numsub4'; \ ++ b='numsub4'; \ ++ $(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) ++numsub5.log: numsub5 ++ @p='numsub5'; \ ++ b='numsub5'; \ ++ $(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) ++0range.log: 0range ++ @p='0range'; \ ++ b='0range'; \ ++ $(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) ++bkslashes.log: bkslashes ++ @p='bkslashes'; \ ++ b='bkslashes'; \ ++ $(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) ++head.log: head ++ @p='head'; \ ++ b='head'; \ ++ $(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) ++madding.log: madding ++ @p='madding'; \ ++ b='madding'; \ ++ $(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) ++mac-mf.log: mac-mf ++ @p='mac-mf'; \ ++ b='mac-mf'; \ ++ $(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) ++empty.log: empty ++ @p='empty'; \ ++ b='empty'; \ ++ $(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) ++xbxcx.log: xbxcx ++ @p='xbxcx'; \ ++ b='xbxcx'; \ ++ $(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) ++xbxcx3.log: xbxcx3 ++ @p='xbxcx3'; \ ++ b='xbxcx3'; \ ++ $(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) ++recall.log: recall ++ @p='recall'; \ ++ b='recall'; \ ++ $(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) ++recall2.log: recall2 ++ @p='recall2'; \ ++ b='recall2'; \ ++ $(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) ++xemacs.log: xemacs ++ @p='xemacs'; \ ++ b='xemacs'; \ ++ $(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) ++fasts.log: fasts ++ @p='fasts'; \ ++ b='fasts'; \ ++ $(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) ++uniq.log: uniq ++ @p='uniq'; \ ++ b='uniq'; \ ++ $(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) ++manis.log: manis ++ @p='manis'; \ ++ b='manis'; \ ++ $(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) ++khadafy.log: khadafy ++ @p='khadafy'; \ ++ b='khadafy'; \ ++ $(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) ++linecnt.log: linecnt ++ @p='linecnt'; \ ++ b='linecnt'; \ ++ $(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) ++eval.log: eval ++ @p='eval'; \ ++ b='eval'; \ ++ $(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) ++distrib.log: distrib ++ @p='distrib'; \ ++ b='distrib'; \ ++ $(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) ++8to7.log: 8to7 ++ @p='8to7'; \ ++ b='8to7'; \ ++ $(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) ++y-bracket.log: y-bracket ++ @p='y-bracket'; \ ++ b='y-bracket'; \ ++ $(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) ++y-newline.log: y-newline ++ @p='y-newline'; \ ++ b='y-newline'; \ ++ $(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) ++allsub.log: allsub ++ @p='allsub'; \ ++ b='allsub'; \ ++ $(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) ++cv-vars.log: cv-vars ++ @p='cv-vars'; \ ++ b='cv-vars'; \ ++ $(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) ++classes.log: classes ++ @p='classes'; \ ++ b='classes'; \ ++ $(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) ++middle.log: middle ++ @p='middle'; \ ++ b='middle'; \ ++ $(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) ++bsd.log: bsd ++ @p='bsd'; \ ++ b='bsd'; \ ++ $(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) ++stdin.log: stdin ++ @p='stdin'; \ ++ b='stdin'; \ ++ $(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) ++flipcase.log: flipcase ++ @p='flipcase'; \ ++ b='flipcase'; \ ++ $(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) ++insens.log: insens ++ @p='insens'; \ ++ b='insens'; \ ++ $(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) ++subwrite.log: subwrite ++ @p='subwrite'; \ ++ b='subwrite'; \ ++ $(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) ++writeout.log: writeout ++ @p='writeout'; \ ++ b='writeout'; \ ++ $(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) ++readin.log: readin ++ @p='readin'; \ ++ b='readin'; \ ++ $(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) ++insert.log: insert ++ @p='insert'; \ ++ b='insert'; \ ++ $(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) ++utf8-1.log: utf8-1 ++ @p='utf8-1'; \ ++ b='utf8-1'; \ ++ $(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) ++utf8-2.log: utf8-2 ++ @p='utf8-2'; \ ++ b='utf8-2'; \ ++ $(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) ++utf8-3.log: utf8-3 ++ @p='utf8-3'; \ ++ b='utf8-3'; \ ++ $(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) ++utf8-4.log: utf8-4 ++ @p='utf8-4'; \ ++ b='utf8-4'; \ ++ $(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) ++badenc.log: badenc ++ @p='badenc'; \ ++ b='badenc'; \ ++ $(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) ++inplace-hold.log: inplace-hold ++ @p='inplace-hold'; \ ++ b='inplace-hold'; \ ++ $(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) ++brackets.log: brackets ++ @p='brackets'; \ ++ b='brackets'; \ ++ $(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) ++amp-escape.log: amp-escape ++ @p='amp-escape'; \ ++ b='amp-escape'; \ ++ $(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) ++help.log: help ++ @p='help'; \ ++ b='help'; \ ++ $(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) ++version.log: version ++ @p='version'; \ ++ b='version'; \ ++ $(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) ++file.log: file ++ @p='file'; \ ++ b='file'; \ ++ $(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) ++quiet.log: quiet ++ @p='quiet'; \ ++ b='quiet'; \ ++ $(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) ++factor.log: factor ++ @p='factor'; \ ++ b='factor'; \ ++ $(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) ++binary3.log: binary3 ++ @p='binary3'; \ ++ b='binary3'; \ ++ $(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) ++binary2.log: binary2 ++ @p='binary2'; \ ++ b='binary2'; \ ++ $(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) ++binary.log: binary ++ @p='binary'; \ ++ b='binary'; \ ++ $(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) ++dc.log: dc ++ @p='dc'; \ ++ b='dc'; \ ++ $(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'`; \ +@@ -1446,6 +2393,9 @@ install-strip: + "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) +@@ -1528,18 +2478,20 @@ uninstall-am: + + .MAKE: check-am install-am install-strip + +-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ +- clean-checkPROGRAMS clean-generic cscopelist ctags distclean \ +- distclean-compile distclean-generic distclean-tags distdir 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-ps install-ps-am install-strip \ +- installcheck installcheck-am installdirs maintainer-clean \ +- maintainer-clean-generic mostlyclean mostlyclean-compile \ +- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ +- uninstall-am ++.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ ++ clean-checkPROGRAMS clean-generic cscopelist-am ctags ctags-am \ ++ distclean distclean-compile distclean-generic distclean-tags \ ++ distdir 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-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ ++ recheck tags tags-am uninstall uninstall-am ++ ++.PRECIOUS: Makefile + + + # automake makes `check' depend on $(TESTS). Declare diff --git a/ndk-libc++-bionic.patch b/ndk-libc++-bionic.patch new file mode 100644 index 0000000..6efa9b4 --- /dev/null +++ b/ndk-libc++-bionic.patch @@ -0,0 +1,37 @@ +diff --git a/r13/sources/cxx-stl/llvm-libc++/include/cmath b/r13/sources/cxx-stl/llvm-libc++/include/cmath +index b3e95940..86f037a1 100644 +--- a/r13/sources/cxx-stl/llvm-libc++/include/cmath ++++ b/r13/sources/cxx-stl/llvm-libc++/include/cmath +@@ -310,11 +310,18 @@ long double truncl(long double x); + + _LIBCPP_BEGIN_NAMESPACE_STD + ++#ifndef signbit + using ::signbit; ++#endif ++#ifndef fpclassify + using ::fpclassify; ++#endif ++#ifndef isfinite + using ::isfinite; ++#endif + using ::isinf; + using ::isnan; ++#ifndef isnormal + using ::isnormal; + using ::isgreater; + using ::isgreaterequal; +@@ -323,11 +330,12 @@ using ::islessequal; + using ::islessgreater; + using ::isunordered; + using ::isunordered; ++#endif + + using ::float_t; + using ::double_t; + +-#ifndef _AIX ++#if !defined(_AIX) && !defined(__BIONIC__) + using ::abs; + #endif + diff --git a/ndkrepo-aarch64-host.patch b/ndkrepo-aarch64-host.patch new file mode 100644 index 0000000..f6c01c7 --- /dev/null +++ b/ndkrepo-aarch64-host.patch @@ -0,0 +1,501 @@ + +project ndk/ +diff --git a/build/lib/build_support.py b/build/lib/build_support.py +index d81efa2..8e6a31d 100644 +--- a/build/lib/build_support.py ++++ b/build/lib/build_support.py +@@ -17,6 +17,7 @@ import argparse + import datetime + import multiprocessing + import os ++import platform + import shutil + import subprocess + import sys +@@ -200,7 +201,7 @@ def get_default_host(): + + def host_to_tag(host): + if host in ['darwin', 'linux']: +- return host + '-x86_64' ++ return host + '-' + platform.machine() + elif host == 'windows': + return 'windows' + elif host == 'windows64': +diff --git a/build/tools/prebuilt-common.sh b/build/tools/prebuilt-common.sh +index 106b661..f358d96 100644 +--- a/build/tools/prebuilt-common.sh ++++ b/build/tools/prebuilt-common.sh +@@ -836,22 +836,38 @@ EOF + fi + $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=$BINPREFIX --dst-prefix="$DST_PREFIX" "$CROSS_WRAP_DIR" \ + --cflags="$HOST_CFLAGS" --cxxflags="$HOST_CFLAGS" --ldflags="$HOST_LDFLAGS" +- # generate wrappers for BUILD toolchain +- # this is required for mingw/darwin build to avoid tools canadian cross configuration issues +- # 32-bit BUILD toolchain +- LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-linux-gnu- \ +- --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-pc-linux-gnu- \ +- --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- # 64-bit BUILD toolchain. libbfd is still built in 32-bit. +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-linux-gnu- \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-pc-linux-gnu- \ +- --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" +- fail_panic "Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR" ++ if [ "`uname -m`" = "aarch64" ]; then ++ LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-aarch64/host/aarch64-linux-glibc2.11-4.8" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=arm-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m armelf_linux_eabi" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=arm-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m armelf_linux_eabi" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ # 64-bit BUILD toolchain. libbfd is still built in 32-bit. ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=aarch64-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/aarch64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=aarch64-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/aarch64-linux-" "$CROSS_WRAP_DIR" ++ fail_panic "Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR" ++ else ++ # generate wrappers for BUILD toolchain ++ # this is required for mingw/darwin build to avoid tools canadian cross configuration issues ++ # 32-bit BUILD toolchain ++ LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=i386-pc-linux-gnu- \ ++ --cflags="-m32" --cxxflags="-m32" --ldflags="-m elf_i386" --asflags="--32" \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ # 64-bit BUILD toolchain. libbfd is still built in 32-bit. ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ $NDK_BUILDTOOLS_PATH/gen-toolchain-wrapper.sh --src-prefix=x86_64-pc-linux-gnu- \ ++ --dst-prefix="$LEGACY_TOOLCHAIN_DIR/bin/x86_64-linux-" "$CROSS_WRAP_DIR" ++ fail_panic "Could not create $DEBIAN_NAME wrapper toolchain in $CROSS_WRAP_DIR" ++ fi + + export PATH=$CROSS_WRAP_DIR:$PATH + dump "Using $DEBIAN_NAME wrapper: $CROSS_WRAP_DIR/${BINPREFIX}gcc" +@@ -918,8 +934,15 @@ prepare_common_build () + if [ -z "$CC" ]; then + LEGACY_TOOLCHAIN_DIR= + if [ "$HOST_OS" = "linux" ]; then +- LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin" +- LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/x86_64-linux-" ++ if [ "$HOST_ARCH" = "aarch64" ]; then ++ # No prebuilt toolchain for aarch64 hosts yet, let's use the system compiler ++ log "Using system compiler for $HOST_ARCH $HOST_OS" ++ CC=gcc ++ CXX=g++ ++ else ++ LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/bin" ++ LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/x86_64-linux-" ++ fi + elif [ "$HOST_OS" = "darwin" ]; then + LEGACY_TOOLCHAIN_DIR="$ANDROID_BUILD_TOP/prebuilts/gcc/darwin-x86/host/i686-apple-darwin-4.2.1/bin" + LEGACY_TOOLCHAIN_PREFIX="$LEGACY_TOOLCHAIN_DIR/i686-apple-darwin10-" +@@ -1014,6 +1037,9 @@ prepare_abi_configure_build () + linux-x86_64) + ABI_CONFIGURE_BUILD=x86_64-linux-gnu + ;; ++ linux-aarch64) ++ ABI_CONFIGURE_BUILD=aarch64-linux-gnu ++ ;; + darwin-x86) + ABI_CONFIGURE_BUILD=i686-apple-darwin + ;; +@@ -1038,7 +1064,11 @@ prepare_target_build () + ABI_CONFIGURE_HOST="$ABI_CONFIGURE_BUILD" + + prepare_common_build +- HOST_GMP_ABI=$HOST_BITS ++ if [ "$HOST_ARCH" = "aarch64" ]; then ++ HOST_GMP_ABI=standard ++ else ++ HOST_GMP_ABI=$HOST_BITS ++ fi + + # Now handle the --mingw/--darwin flag + if [ "$MINGW" = "yes" -o "$DARWIN" = "yes" ] ; then +diff --git a/scripts/gen_release_table.py b/scripts/gen_release_table.py +index a600536..d800f50 100755 +--- a/scripts/gen_release_table.py ++++ b/scripts/gen_release_table.py +@@ -77,6 +77,7 @@ def main(): + pretty_host = { + 'darwin-x86_64': 'Mac OS X', + 'linux-x86_64': 'Linux', ++ 'linux-aarch64': 'Linux for ARMv8', + 'windows-x86_64': 'Windows 64-bit', + 'windows-x86': 'Windows 32-bit', + }[host] +project toolchain/build/ +diff --git a/Makefile.in b/Makefile.in +index 21f33d7..dab823e 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -409,7 +409,7 @@ config-target-gcc: stmp-config-target-gcc + + GCC_CONFIG_ARGS=--prefix=$(prefix) \ + --target=${cur_target} --host=${cur_host} --build=${cur_build} \ +- --with-gnu-as --with-gnu-ld --enable-languages=c,c++ ++ --with-gnu-as --with-gnu-ld --enable-languages=c,c++,fortran,objc,obj-c++ + + # For gcc versions 4.3.0 and later, gmp and mpfr are required. + # Also build libgcc is a seperate sub-target in 4.3.0+. +diff --git a/configure b/configure +index 738b57a..1558809 100755 +--- a/configure ++++ b/configure +@@ -2659,6 +2659,8 @@ if test \( ! -d $srcdir/../$tool/ppl-${PPL_VERSION} \) -a \( x"$version" != x"no + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/ppl-${PPL_VERSION}.tgz + elif test -f $srcdir/../$tool/ppl-${PPL_VERSION}.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/ppl-${PPL_VERSION}.tar.bz2 ++ elif test -f $srcdir/../$tool/ppl-${PPL_VERSION}.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../$tool/ppl-${PPL_VERSION}.tar.xz + elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar ; then + mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/ppl-${PPL_VERSION}.tar + elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.gz ; then +@@ -2667,6 +2669,8 @@ if test \( ! -d $srcdir/../$tool/ppl-${PPL_VERSION} \) -a \( x"$version" != x"no + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/ppl-${PPL_VERSION}.tgz + elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.bz2 ++ elif test -f $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../tarballs/ppl-${PPL_VERSION}.tar.xz + else + as_fn_error "'package ppl-${PPL_VERSION} does not exist.'" "$LINENO" 5 + fi +diff --git a/configure.ac b/configure.ac +index b316a7e..6b2acff 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -268,6 +268,8 @@ if test \( ! -d $srcdir/../$tool/$1 \) -a \( x"$version" != x"none" \) ; then + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../$tool/$1.tgz + elif test -f $srcdir/../$tool/$1.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../$tool/$1.tar.bz2 ++ elif test -f $srcdir/../$tool/$1.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../$tool/$1.tar.xz + elif test -f $srcdir/../tarballs/$1.tar ; then + mkdir -p temp-src && tar -C temp-src -xf $srcdir/../tarballs/$1.tar + elif test -f $srcdir/../tarballs/$1.tar.gz ; then +@@ -276,6 +278,8 @@ if test \( ! -d $srcdir/../$tool/$1 \) -a \( x"$version" != x"none" \) ; then + mkdir -p temp-src && tar -C temp-src -xzf $srcdir/../tarballs/$1.tgz + elif test -f $srcdir/../tarballs/$1.tar.bz2 ; then + mkdir -p temp-src && tar -C temp-src -xjf $srcdir/../tarballs/$1.tar.bz2 ++ elif test -f $srcdir/../tarballs/$1.tar.xz ; then ++ mkdir -p temp-src && tar -C temp-src -xJf $srcdir/../tarballs/$1.tar.xz + else + AC_MSG_ERROR('package $1 does not exist.') + fi +project toolchain/gcc/ +diff --git a/build-gcc.sh b/build-gcc.sh +index 4893461..4a821d7 100755 +--- a/build-gcc.sh ++++ b/build-gcc.sh +@@ -70,7 +70,7 @@ register_var_option "--ppl-version=<version>" PPL_VERSION "Specify ppl version" + PACKAGE_DIR= + register_var_option "--package-dir=<path>" PACKAGE_DIR "Create archive tarball in specific directory" + +-ENABLE_LANGUAGES="c,c++" ++ENABLE_LANGUAGES="c,c++,fortran,objc,obj-c++" + register_var_option "--enable-languages=<name>" ENABLE_LANGUAGES "Experimental: specify which languages to build" + + BUILD_DEBUGGABLE="no" +diff --git a/gcc-4.9/gcc/graphite-clast-to-gimple.c b/gcc-4.9/gcc/graphite-clast-to-gimple.c +index 134388c..4317989 100644 +--- a/gcc-4.9/gcc/graphite-clast-to-gimple.c ++++ b/gcc-4.9/gcc/graphite-clast-to-gimple.c +@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see + #include <isl/constraint.h> + #include <isl/ilp.h> + #include <isl/aff.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/ilp_int.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE +diff --git a/gcc-4.9/gcc/graphite-dependences.c b/gcc-4.9/gcc/graphite-dependences.c +index b0f8680..32000e0 100644 +--- a/gcc-4.9/gcc/graphite-dependences.c ++++ b/gcc-4.9/gcc/graphite-dependences.c +@@ -183,7 +183,7 @@ scop_get_transformed_schedule (scop_p scop, vec<poly_bb_p> pbbs) + /* Helper function used on each MAP of a isl_union_map. Computes the + maximal output dimension. */ + +-static int ++static isl_stat + max_number_of_out_dimensions (__isl_take isl_map *map, void *user) + { + int global_max = *((int *) user); +@@ -195,7 +195,7 @@ max_number_of_out_dimensions (__isl_take isl_map *map, void *user) + + isl_map_free (map); + isl_space_free (space); +- return 0; ++ return isl_stat_ok; + } + + /* Extends the output dimension of MAP to MAX dimensions. */ +@@ -219,12 +219,12 @@ struct extend_schedule_str { + + /* Helper function for extend_schedule. */ + +-static int ++static isl_stat + extend_schedule_1 (__isl_take isl_map *map, void *user) + { + struct extend_schedule_str *str = (struct extend_schedule_str *) user; + str->umap = isl_union_map_add_map (str->umap, extend_map (map, str->max)); +- return 0; ++ return isl_stat_ok; + } + + /* Return a relation that has uniform output dimensions. */ +diff --git a/gcc-4.9/gcc/graphite-interchange.c b/gcc-4.9/gcc/graphite-interchange.c +index 2e625c1..1984a2c 100644 +--- a/gcc-4.9/gcc/graphite-interchange.c ++++ b/gcc-4.9/gcc/graphite-interchange.c +@@ -29,6 +29,9 @@ along with GCC; see the file COPYING3. If not see + #include <isl/map.h> + #include <isl/union_map.h> + #include <isl/ilp.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/ilp_int.h> ++#include <isl/deprecated/constraint_int.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE +diff --git a/gcc-4.9/gcc/graphite-optimize-isl.c b/gcc-4.9/gcc/graphite-optimize-isl.c +index fc12eeb..f0b7506 100644 +--- a/gcc-4.9/gcc/graphite-optimize-isl.c ++++ b/gcc-4.9/gcc/graphite-optimize-isl.c +@@ -28,6 +28,9 @@ along with GCC; see the file COPYING3. If not see + #include <isl/band.h> + #include <isl/aff.h> + #include <isl/options.h> ++#include <isl/union_set.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/aff_int.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE + #include <isl/deprecated/int.h> + #include <isl/deprecated/aff_int.h> +@@ -415,13 +418,13 @@ getScheduleMap (isl_schedule *Schedule) + return ScheduleMap; + } + +-static int ++static isl_stat + getSingleMap (__isl_take isl_map *map, void *user) + { + isl_map **singleMap = (isl_map **) user; + *singleMap = map; + +- return 0; ++ return isl_stat_ok; + } + + static void +@@ -469,7 +472,7 @@ optimize_isl (scop_p scop) + + isl_options_set_schedule_max_constant_term (scop->ctx, CONSTANT_BOUND); + isl_options_set_schedule_maximize_band_depth (scop->ctx, 1); +- isl_options_set_schedule_fuse (scop->ctx, ISL_SCHEDULE_FUSE_MIN); ++ isl_options_set_schedule_serialize_sccs (scop->ctx, 1); + isl_options_set_on_error (scop->ctx, ISL_ON_ERROR_CONTINUE); + schedule = isl_union_set_compute_schedule (domain, validity, proximity); + isl_options_set_on_error (scop->ctx, ISL_ON_ERROR_ABORT); +diff --git a/gcc-4.9/gcc/graphite-poly.c b/gcc-4.9/gcc/graphite-poly.c +index fccc2ec..6b99071 100644 +--- a/gcc-4.9/gcc/graphite-poly.c ++++ b/gcc-4.9/gcc/graphite-poly.c +@@ -28,6 +28,8 @@ along with GCC; see the file COPYING3. If not see + #include <isl/constraint.h> + #include <isl/ilp.h> + #include <isl/aff.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/ilp_int.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> + #ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE +diff --git a/gcc-4.9/gcc/graphite-poly.h b/gcc-4.9/gcc/graphite-poly.h +index 06d320e..28a2498 100644 +--- a/gcc-4.9/gcc/graphite-poly.h ++++ b/gcc-4.9/gcc/graphite-poly.h +@@ -22,6 +22,8 @@ along with GCC; see the file COPYING3. If not see + #ifndef GCC_GRAPHITE_POLY_H + #define GCC_GRAPHITE_POLY_H + ++#include <isl/constraint.h> ++ + typedef struct poly_dr *poly_dr_p; + + typedef struct poly_bb *poly_bb_p; +diff --git a/gcc-4.9/gcc/graphite-sese-to-poly.c b/gcc-4.9/gcc/graphite-sese-to-poly.c +index 059c10d..65d4e56 100644 +--- a/gcc-4.9/gcc/graphite-sese-to-poly.c ++++ b/gcc-4.9/gcc/graphite-sese-to-poly.c +@@ -26,6 +26,9 @@ along with GCC; see the file COPYING3. If not see + #include <isl/union_map.h> + #include <isl/constraint.h> + #include <isl/aff.h> ++#include <isl/deprecated/int.h> ++#include <isl/deprecated/aff_int.h> ++#include <isl/deprecated/constraint_int.h> + #include <cloog/cloog.h> + #include <cloog/cloog.h> + #include <cloog/isl/domain.h> +diff --git a/gcc-4.9/libgfortran/intrinsics/cshift0.c b/gcc-4.9/libgfortran/intrinsics/cshift0.c +index f983754..5187ed9 100644 +--- a/gcc-4.9/libgfortran/intrinsics/cshift0.c ++++ b/gcc-4.9/libgfortran/intrinsics/cshift0.c +@@ -146,7 +146,7 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + cshift0_r16 ((gfc_array_r16 *)ret, (gfc_array_r16 *) array, shift, + which); +@@ -176,7 +176,7 @@ cshift0 (gfc_array_char * ret, const gfc_array_char * array, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 // defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + cshift0_c16 ((gfc_array_c16 *)ret, (gfc_array_c16 *) array, shift, + which); +diff --git a/gcc-4.9/libgfortran/intrinsics/pack_generic.c b/gcc-4.9/libgfortran/intrinsics/pack_generic.c +index 3fbfa0a..ebaba1c 100644 +--- a/gcc-4.9/libgfortran/intrinsics/pack_generic.c ++++ b/gcc-4.9/libgfortran/intrinsics/pack_generic.c +@@ -312,7 +312,7 @@ pack (gfc_array_char *ret, const gfc_array_char *array, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + pack_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) array, + (gfc_array_l1 *) mask, (gfc_array_r16 *) vector); +@@ -344,7 +344,7 @@ pack (gfc_array_char *ret, const gfc_array_char *array, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + pack_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) array, + (gfc_array_l1 *) mask, (gfc_array_c16 *) vector); +diff --git a/gcc-4.9/libgfortran/intrinsics/spread_generic.c b/gcc-4.9/libgfortran/intrinsics/spread_generic.c +index f3f23b8..07d316c 100644 +--- a/gcc-4.9/libgfortran/intrinsics/spread_generic.c ++++ b/gcc-4.9/libgfortran/intrinsics/spread_generic.c +@@ -529,7 +529,7 @@ spread_scalar (gfc_array_char *ret, const char *source, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + spread_scalar_r16 ((gfc_array_r16 *) ret, (GFC_REAL_16 *) source, + *along, *pncopies); +@@ -561,7 +561,7 @@ spread_scalar (gfc_array_char *ret, const char *source, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + spread_scalar_c16 ((gfc_array_c16 *) ret, (GFC_COMPLEX_16 *) source, + *along, *pncopies); +diff --git a/gcc-4.9/libgfortran/intrinsics/unpack_generic.c b/gcc-4.9/libgfortran/intrinsics/unpack_generic.c +index 4bd9927..330c9e2 100644 +--- a/gcc-4.9/libgfortran/intrinsics/unpack_generic.c ++++ b/gcc-4.9/libgfortran/intrinsics/unpack_generic.c +@@ -278,7 +278,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + unpack1_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) vector, + mask, (gfc_array_r16 *) field); +@@ -310,7 +310,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + unpack1_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) vector, + mask, (gfc_array_c16 *) field); +@@ -489,7 +489,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_REAL_16 ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + unpack0_r16 ((gfc_array_r16 *) ret, (gfc_array_r16 *) vector, + mask, (GFC_REAL_16 *) field); +@@ -521,7 +521,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector, + return; + # endif + +-# ifdef HAVE_GFC_COMPLEX_16 ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + unpack0_c16 ((gfc_array_c16 *) ret, (gfc_array_c16 *) vector, + mask, (GFC_COMPLEX_16 *) field); +diff --git a/gcc-4.9/libgfortran/runtime/in_pack_generic.c b/gcc-4.9/libgfortran/runtime/in_pack_generic.c +index aab155d..a2ba81e 100644 +--- a/gcc-4.9/libgfortran/runtime/in_pack_generic.c ++++ b/gcc-4.9/libgfortran/runtime/in_pack_generic.c +@@ -95,7 +95,7 @@ internal_pack (gfc_array_char * source) + return internal_pack_r10 ((gfc_array_r10 *) source); + # endif + +-# if defined (HAVE_GFC_REAL_16) ++# if 0 && defined (HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + return internal_pack_r16 ((gfc_array_r16 *) source); + # endif +@@ -119,7 +119,7 @@ internal_pack (gfc_array_char * source) + return internal_pack_c10 ((gfc_array_c10 *) source); + # endif + +-# if defined (HAVE_GFC_COMPLEX_16) ++# if 0 && defined (HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + return internal_pack_c16 ((gfc_array_c16 *) source); + # endif +diff --git a/gcc-4.9/libgfortran/runtime/in_unpack_generic.c b/gcc-4.9/libgfortran/runtime/in_unpack_generic.c +index 18855e1..ff65a18 100644 +--- a/gcc-4.9/libgfortran/runtime/in_unpack_generic.c ++++ b/gcc-4.9/libgfortran/runtime/in_unpack_generic.c +@@ -103,7 +103,7 @@ internal_unpack (gfc_array_char * d, const void * s) + return; + # endif + +-# if defined(HAVE_GFC_REAL_16) ++# if 0 && defined(HAVE_GFC_REAL_16) + case GFC_DTYPE_REAL_16: + internal_unpack_r16 ((gfc_array_r16 *) d, (const GFC_REAL_16 *) s); + return; +@@ -131,7 +131,7 @@ internal_unpack (gfc_array_char * d, const void * s) + return; + # endif + +-# if defined(HAVE_GFC_COMPLEX_16) ++# if 0 && defined(HAVE_GFC_COMPLEX_16) + case GFC_DTYPE_COMPLEX_16: + internal_unpack_c16 ((gfc_array_c16 *) d, (const GFC_COMPLEX_16 *) s); + return; + diff --git a/prebuilts_build-tools-aarch64-host.patch b/prebuilts_build-tools-aarch64-host.patch new file mode 100644 index 0000000..cd6aaa7 --- /dev/null +++ b/prebuilts_build-tools-aarch64-host.patch @@ -0,0 +1,88 @@ +diff --git a/build-prebuilts.sh b/build-prebuilts.sh +index e39f6bd..917c546 100755 +--- a/build-prebuilts.sh ++++ b/build-prebuilts.sh +@@ -20,6 +20,23 @@ Darwin) + ;; + esac + ++ARCH="$(uname -m)" ++case "$ARCH" in ++x86_64) ++ ARCHDIR=x86 ++ SECONDARY=x86 ++ ;; ++aarch64) ++ ARCH=arm64 ++ ARCHDIR=arm64 ++ SECONDARY=arm ++ ;; ++*) ++ ARCHDIR=$ARCH ++ SECONDARY="" ++ ;; ++esac ++ + build_soong=1 + if [ -d ${TOP}/toolchain/go ]; then + build_go=1 +@@ -28,14 +45,20 @@ fi + if [ -n ${build_soong} ]; then + # ckati and makeparallel (Soong) + SOONG_OUT=${OUT_DIR}/soong +- SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-x86 ++ SOONG_HOST_OUT=${OUT_DIR}/soong/host/${OS}-${ARCHDIR} + rm -rf ${SOONG_OUT} + mkdir -p ${SOONG_OUT} + cat > ${SOONG_OUT}/soong.variables << EOF + { + "Allow_missing_dependencies": true, +- "HostArch":"x86_64", +- "HostSecondaryArch":"x86" ++ "HostArch":"${ARCH}", ++EOF ++ if [ -n "${SECONDARY}" ]; then ++ cat >> ${SOONG_OUT}/soong.variables << EOF ++ "HostSecondaryArch":"${SECONDARY}" ++EOF ++ fi ++ cat >> ${SOONG_OUT}/soong.variables << EOF + } + EOF + BUILDDIR=${SOONG_OUT} ./bootstrap.bash +@@ -53,8 +76,14 @@ EOF + cat > ${SOONG_OUT}/soong.variables << EOF + { + "Allow_missing_dependencies": true, +- "HostArch":"x86_64", +- "HostSecondaryArch":"x86", ++ "HostArch":"${ARCH}", ++EOF ++ if [ -n "${SECONDARY}" ]; then ++ cat > ${SOONG_OUT}/soong.variables << EOF ++ "HostSecondaryArch":"${SECONDARY}", ++EOF ++ fi ++ cat > ${SOONG_OUT}/soong.variables << EOF + "SanitizeHost": ["address"] + } + EOF +@@ -80,8 +109,8 @@ if [ -n ${build_go} ]; then + cp -a ${TOP}/toolchain/go/* ${GO_OUT}/ + ( + cd ${GO_OUT}/src +- export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-x86 +- export GOROOT_FINAL=./prebuilts/go/${OS}-x86 ++ export GOROOT_BOOTSTRAP=${TOP}/prebuilts/go/${OS}-${ARCHDIR} ++ export GOROOT_FINAL=./prebuilts/go/${OS}-${ARCHDIR} + export GO_TEST_TIMEOUT_SCALE=100 + ./make.bash + rm -rf ../pkg/bootstrap +Binary files /dev/null and build-tools/linux-arm64/bin/acp differ +Binary files /dev/null and build-tools/linux-arm64/bin/bpfmt differ +Binary files /dev/null and build-tools/linux-arm64/bin/ckati differ +Binary files /dev/null and build-tools/linux-arm64/bin/ckati_stamp_dump differ +Binary files /dev/null and build-tools/linux-arm64/bin/ijar differ +Binary files /dev/null and build-tools/linux-arm64/bin/makeparallel differ +Binary files /dev/null and build-tools/linux-arm64/bin/ninja differ +Binary files /dev/null and build-tools/linux-arm64/bin/ziptime differ |